From 3a879dd4958c439b4d2fbf1252d51b4e75d88114 Mon Sep 17 00:00:00 2001 From: chriswmackey Date: Thu, 31 Oct 2024 21:40:41 +0000 Subject: [PATCH] deploy: update docs --- .nojekyll | 1 + README.md | 1 + docs/.buildinfo | 4 + docs/.doctrees/cli/abnt.doctree | Bin 0 -> 15987 bytes docs/.doctrees/cli/datacollection.doctree | Bin 0 -> 17980 bytes docs/.doctrees/cli/grid.doctree | Bin 0 -> 24876 bytes docs/.doctrees/cli/index.doctree | Bin 0 -> 3234 bytes docs/.doctrees/cli/leed.doctree | Bin 0 -> 18716 bytes docs/.doctrees/cli/main.doctree | Bin 0 -> 414537 bytes docs/.doctrees/cli/merge.doctree | Bin 0 -> 20028 bytes docs/.doctrees/cli/mtxop.doctree | Bin 0 -> 30886 bytes docs/.doctrees/cli/postprocess.doctree | Bin 0 -> 286759 bytes docs/.doctrees/cli/schedule.doctree | Bin 0 -> 21467 bytes docs/.doctrees/cli/translate.doctree | Bin 0 -> 38092 bytes docs/.doctrees/cli/two_phase.doctree | Bin 0 -> 38367 bytes docs/.doctrees/cli/viewfactor.doctree | Bin 0 -> 14850 bytes docs/.doctrees/cli/well.doctree | Bin 0 -> 18707 bytes docs/.doctrees/environment.pickle | Bin 0 -> 713745 bytes ...neybee_radiance_postprocess.annual.doctree | Bin 0 -> 19378 bytes ...adiance_postprocess.annualdaylight.doctree | Bin 0 -> 24478 bytes ...iance_postprocess.annualirradiance.doctree | Bin 0 -> 3599 bytes ...ybee_radiance_postprocess.cli.abnt.doctree | Bin 0 -> 3475 bytes ...nce_postprocess.cli.datacollection.doctree | Bin 0 -> 3587 bytes .../honeybee_radiance_postprocess.cli.doctree | Bin 0 -> 4900 bytes ...ybee_radiance_postprocess.cli.grid.doctree | Bin 0 -> 21676 bytes ...ybee_radiance_postprocess.cli.leed.doctree | Bin 0 -> 3511 bytes ...bee_radiance_postprocess.cli.merge.doctree | Bin 0 -> 3500 bytes ...bee_radiance_postprocess.cli.mtxop.doctree | Bin 0 -> 3514 bytes ...diance_postprocess.cli.postprocess.doctree | Bin 0 -> 3578 bytes ..._radiance_postprocess.cli.schedule.doctree | Bin 0 -> 3539 bytes ...radiance_postprocess.cli.translate.doctree | Bin 0 -> 3514 bytes ...radiance_postprocess.cli.two_phase.doctree | Bin 0 -> 3580 bytes ...ybee_radiance_postprocess.cli.util.doctree | Bin 0 -> 12722 bytes ...adiance_postprocess.cli.viewfactor.doctree | Bin 0 -> 3555 bytes ...ybee_radiance_postprocess.cli.well.doctree | Bin 0 -> 3487 bytes ...bee_radiance_postprocess.data_type.doctree | Bin 0 -> 31102 bytes .../honeybee_radiance_postprocess.doctree | Bin 0 -> 5415 bytes ...eybee_radiance_postprocess.dynamic.doctree | Bin 0 -> 54807 bytes ...radiance_postprocess.electriclight.doctree | Bin 0 -> 10554 bytes ...eybee_radiance_postprocess.en17037.doctree | Bin 0 -> 21408 bytes ...neybee_radiance_postprocess.helper.doctree | Bin 0 -> 16482 bytes .../honeybee_radiance_postprocess.ies.doctree | Bin 0 -> 4342 bytes ...neybee_radiance_postprocess.ies.lm.doctree | Bin 0 -> 24775 bytes ...diance_postprocess.ies.lm_schedule.doctree | Bin 0 -> 13341 bytes ...honeybee_radiance_postprocess.leed.doctree | Bin 0 -> 4360 bytes ...bee_radiance_postprocess.leed.leed.doctree | Bin 0 -> 49652 bytes ...nce_postprocess.leed.leed_schedule.doctree | Bin 0 -> 13432 bytes ...eybee_radiance_postprocess.metrics.doctree | Bin 0 -> 130674 bytes ...neybee_radiance_postprocess.reader.doctree | Bin 0 -> 24307 bytes ...ostprocess.results.annual_daylight.doctree | Bin 0 -> 401683 bytes ...tprocess.results.annual_irradiance.doctree | Bin 0 -> 233641 bytes ...eybee_radiance_postprocess.results.doctree | Bin 0 -> 4470 bytes ...diance_postprocess.results.results.doctree | Bin 0 -> 210537 bytes ...ee_radiance_postprocess.type_hints.doctree | Bin 0 -> 3513 bytes ...honeybee_radiance_postprocess.util.doctree | Bin 0 -> 36887 bytes ..._radiance_postprocess.vis_metadata.doctree | Bin 0 -> 3519 bytes ...honeybee_radiance_postprocess.well.doctree | Bin 0 -> 4302 bytes ...bee_radiance_postprocess.well.well.doctree | Bin 0 -> 24507 bytes docs/.doctrees/index.doctree | Bin 0 -> 6450 bytes docs/.doctrees/modules.doctree | Bin 0 -> 2908 bytes docs/.nojekyll | 0 docs/README.md | 1 + .../honeybee_radiance_postprocess/annual.html | 744 ++ .../annualdaylight.html | 962 +++ .../cli/grid.html | 968 +++ .../cli/util.html | 805 ++ .../data_type.html | 781 ++ .../dynamic.html | 987 +++ .../electriclight.html | 693 ++ .../en17037.html | 977 +++ .../honeybee_radiance_postprocess/helper.html | 930 +++ .../honeybee_radiance_postprocess/ies/lm.html | 892 +++ .../ies/lm_schedule.html | 921 +++ .../leed/leed.html | 1423 ++++ .../leed/leed_schedule.html | 921 +++ .../metrics.html | 1137 +++ .../honeybee_radiance_postprocess/reader.html | 753 ++ .../results/annual_daylight.html | 1471 ++++ .../results/annual_irradiance.html | 876 +++ .../results/results.html | 2082 +++++ .../honeybee_radiance_postprocess/util.html | 876 +++ .../well/well.html | 1068 +++ docs/_modules/index.html | 692 ++ docs/_sources/cli/abnt.rst.txt | 6 + docs/_sources/cli/datacollection.rst.txt | 6 + docs/_sources/cli/grid.rst.txt | 6 + docs/_sources/cli/index.rst.txt | 22 + docs/_sources/cli/leed.rst.txt | 6 + docs/_sources/cli/main.rst.txt | 7 + docs/_sources/cli/merge.rst.txt | 6 + docs/_sources/cli/mtxop.rst.txt | 6 + docs/_sources/cli/postprocess.rst.txt | 6 + docs/_sources/cli/schedule.rst.txt | 6 + docs/_sources/cli/translate.rst.txt | 6 + docs/_sources/cli/two_phase.rst.txt | 6 + docs/_sources/cli/viewfactor.rst.txt | 6 + docs/_sources/cli/well.rst.txt | 6 + ...neybee_radiance_postprocess.annual.rst.txt | 7 + ...adiance_postprocess.annualdaylight.rst.txt | 7 + ...iance_postprocess.annualirradiance.rst.txt | 7 + ...ybee_radiance_postprocess.cli.abnt.rst.txt | 7 + ...nce_postprocess.cli.datacollection.rst.txt | 7 + ...ybee_radiance_postprocess.cli.grid.rst.txt | 7 + ...ybee_radiance_postprocess.cli.leed.rst.txt | 7 + ...bee_radiance_postprocess.cli.merge.rst.txt | 7 + ...bee_radiance_postprocess.cli.mtxop.rst.txt | 7 + ...diance_postprocess.cli.postprocess.rst.txt | 7 + .../honeybee_radiance_postprocess.cli.rst.txt | 30 + ..._radiance_postprocess.cli.schedule.rst.txt | 7 + ...radiance_postprocess.cli.translate.rst.txt | 7 + ...radiance_postprocess.cli.two_phase.rst.txt | 7 + ...ybee_radiance_postprocess.cli.util.rst.txt | 7 + ...adiance_postprocess.cli.viewfactor.rst.txt | 7 + ...ybee_radiance_postprocess.cli.well.rst.txt | 7 + ...bee_radiance_postprocess.data_type.rst.txt | 7 + ...eybee_radiance_postprocess.dynamic.rst.txt | 7 + ...radiance_postprocess.electriclight.rst.txt | 7 + ...eybee_radiance_postprocess.en17037.rst.txt | 7 + ...neybee_radiance_postprocess.helper.rst.txt | 7 + ...neybee_radiance_postprocess.ies.lm.rst.txt | 7 + ...diance_postprocess.ies.lm_schedule.rst.txt | 7 + .../honeybee_radiance_postprocess.ies.rst.txt | 19 + ...bee_radiance_postprocess.leed.leed.rst.txt | 7 + ...nce_postprocess.leed.leed_schedule.rst.txt | 7 + ...honeybee_radiance_postprocess.leed.rst.txt | 19 + ...eybee_radiance_postprocess.metrics.rst.txt | 7 + ...neybee_radiance_postprocess.reader.rst.txt | 7 + ...ostprocess.results.annual_daylight.rst.txt | 7 + ...tprocess.results.annual_irradiance.rst.txt | 7 + ...diance_postprocess.results.results.rst.txt | 7 + ...eybee_radiance_postprocess.results.rst.txt | 20 + .../honeybee_radiance_postprocess.rst.txt | 42 + ...ee_radiance_postprocess.type_hints.rst.txt | 7 + ...honeybee_radiance_postprocess.util.rst.txt | 7 + ..._radiance_postprocess.vis_metadata.rst.txt | 7 + ...honeybee_radiance_postprocess.well.rst.txt | 18 + ...bee_radiance_postprocess.well.well.rst.txt | 7 + docs/_sources/index.rst.txt | 27 + docs/_sources/modules.rst.txt | 7 + docs/_static/basic.css | 925 +++ .../css/bootstrap-responsive.css | 1109 +++ .../css/bootstrap-responsive.min.css | 9 + .../_static/bootstrap-2.3.2/css/bootstrap.css | 6167 +++++++++++++++ .../bootstrap-2.3.2/css/bootstrap.min.css | 9 + .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 0 -> 12799 bytes docs/_static/bootstrap-2.3.2/js/bootstrap.js | 2287 ++++++ .../bootstrap-2.3.2/js/bootstrap.min.js | 6 + .../bootstrap-3.4.1/css/bootstrap-theme.css | 587 ++ .../css/bootstrap-theme.css.map | 1 + .../css/bootstrap-theme.min.css | 6 + .../css/bootstrap-theme.min.css.map | 1 + .../_static/bootstrap-3.4.1/css/bootstrap.css | 6834 +++++++++++++++++ .../bootstrap-3.4.1/css/bootstrap.css.map | 1 + .../bootstrap-3.4.1/css/bootstrap.min.css | 6 + .../bootstrap-3.4.1/css/bootstrap.min.css.map | 1 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes docs/_static/bootstrap-3.4.1/js/bootstrap.js | 2580 +++++++ .../bootstrap-3.4.1/js/bootstrap.min.js | 6 + docs/_static/bootstrap-3.4.1/js/npm.js | 13 + docs/_static/bootstrap-sphinx.css | 223 + docs/_static/bootstrap-sphinx.js | 175 + .../bootswatch-2.3.2/amelia/bootstrap.min.css | 9 + .../cerulean/bootstrap.min.css | 9 + .../bootswatch-2.3.2/cosmo/bootstrap.min.css | 9 + .../bootswatch-2.3.2/cyborg/bootstrap.min.css | 9 + .../bootswatch-2.3.2/flatly/bootstrap.min.css | 9 + .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 0 -> 12799 bytes .../journal/bootstrap.min.css | 9 + .../readable/bootstrap.min.css | 9 + .../simplex/bootstrap.min.css | 9 + .../bootswatch-2.3.2/slate/bootstrap.min.css | 9 + .../spacelab/bootstrap.min.css | 9 + .../bootswatch-2.3.2/spruce/bootstrap.min.css | 9 + .../superhero/bootstrap.min.css | 9 + .../bootswatch-2.3.2/united/bootstrap.min.css | 9 + .../cerulean/bootstrap.min.css | 11 + .../bootswatch-3.4.1/cosmo/bootstrap.min.css | 11 + .../bootswatch-3.4.1/cyborg/bootstrap.min.css | 11 + .../bootswatch-3.4.1/darkly/bootstrap.min.css | 11 + .../bootswatch-3.4.1/flatly/bootstrap.min.css | 11 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../journal/bootstrap.min.css | 11 + .../bootswatch-3.4.1/lumen/bootstrap.min.css | 11 + .../bootswatch-3.4.1/paper/bootstrap.min.css | 11 + .../readable/bootstrap.min.css | 11 + .../sandstone/bootstrap.min.css | 11 + .../simplex/bootstrap.min.css | 11 + .../bootswatch-3.4.1/slate/bootstrap.min.css | 11 + .../spacelab/bootstrap.min.css | 11 + .../superhero/bootstrap.min.css | 11 + .../bootswatch-3.4.1/united/bootstrap.min.css | 11 + .../bootswatch-3.4.1/yeti/bootstrap.min.css | 11 + docs/_static/custom.css | 65 + docs/_static/doctools.js | 156 + docs/_static/documentation_options.js | 13 + docs/_static/file.png | Bin 0 -> 286 bytes docs/_static/js/jquery-1.12.4.min.js | 5 + docs/_static/js/jquery-fix.js | 2 + docs/_static/language_data.js | 199 + docs/_static/minus.png | Bin 0 -> 90 bytes docs/_static/plus.png | Bin 0 -> 90 bytes docs/_static/pygments.css | 84 + docs/_static/searchtools.js | 620 ++ docs/_static/sphinx_highlight.js | 154 + docs/cli/abnt.html | 811 ++ docs/cli/datacollection.html | 842 ++ docs/cli/grid.html | 864 +++ docs/cli/index.html | 745 ++ docs/cli/leed.html | 823 ++ docs/cli/main.html | 3276 ++++++++ docs/cli/merge.html | 833 ++ docs/cli/mtxop.html | 920 +++ docs/cli/postprocess.html | 2287 ++++++ docs/cli/schedule.html | 838 ++ docs/cli/translate.html | 958 +++ docs/cli/two_phase.html | 943 +++ docs/cli/viewfactor.html | 817 ++ docs/cli/well.html | 823 ++ docs/genindex.html | 4182 ++++++++++ .../honeybee_radiance_postprocess.annual.html | 778 ++ ...e_radiance_postprocess.annualdaylight.html | 801 ++ ...radiance_postprocess.annualirradiance.html | 730 ++ ...oneybee_radiance_postprocess.cli.abnt.html | 752 ++ ...diance_postprocess.cli.datacollection.html | 752 ++ ...oneybee_radiance_postprocess.cli.grid.html | 812 ++ docs/honeybee_radiance_postprocess.cli.html | 785 ++ ...oneybee_radiance_postprocess.cli.leed.html | 752 ++ ...neybee_radiance_postprocess.cli.merge.html | 752 ++ ...neybee_radiance_postprocess.cli.mtxop.html | 752 ++ ..._radiance_postprocess.cli.postprocess.html | 752 ++ ...bee_radiance_postprocess.cli.schedule.html | 752 ++ ...ee_radiance_postprocess.cli.translate.html | 752 ++ ...ee_radiance_postprocess.cli.two_phase.html | 752 ++ ...oneybee_radiance_postprocess.cli.util.html | 788 ++ ...e_radiance_postprocess.cli.viewfactor.html | 752 ++ ...oneybee_radiance_postprocess.cli.well.html | 752 ++ ...neybee_radiance_postprocess.data_type.html | 818 ++ ...honeybee_radiance_postprocess.dynamic.html | 975 +++ ...ee_radiance_postprocess.electriclight.html | 742 ++ ...honeybee_radiance_postprocess.en17037.html | 784 ++ .../honeybee_radiance_postprocess.helper.html | 763 ++ docs/honeybee_radiance_postprocess.html | 950 +++ docs/honeybee_radiance_postprocess.ies.html | 750 ++ .../honeybee_radiance_postprocess.ies.lm.html | 800 ++ ..._radiance_postprocess.ies.lm_schedule.html | 748 ++ docs/honeybee_radiance_postprocess.leed.html | 751 ++ ...neybee_radiance_postprocess.leed.leed.html | 867 +++ ...diance_postprocess.leed.leed_schedule.html | 748 ++ ...honeybee_radiance_postprocess.metrics.html | 1108 +++ .../honeybee_radiance_postprocess.reader.html | 781 ++ ...e_postprocess.results.annual_daylight.html | 1807 +++++ ...postprocess.results.annual_irradiance.html | 1385 ++++ ...honeybee_radiance_postprocess.results.html | 882 +++ ..._radiance_postprocess.results.results.html | 1325 ++++ ...eybee_radiance_postprocess.type_hints.html | 730 ++ docs/honeybee_radiance_postprocess.util.html | 859 +++ ...bee_radiance_postprocess.vis_metadata.html | 725 ++ docs/honeybee_radiance_postprocess.well.html | 742 ++ ...neybee_radiance_postprocess.well.well.html | 789 ++ docs/index.html | 822 ++ docs/modules.html | 792 ++ docs/objects.inv | Bin 0 -> 6605 bytes docs/py-modindex.html | 887 +++ docs/search.html | 699 ++ docs/searchindex.js | 1 + 275 files changed, 101558 insertions(+) create mode 100644 .nojekyll create mode 100644 README.md create mode 100644 docs/.buildinfo create mode 100644 docs/.doctrees/cli/abnt.doctree create mode 100644 docs/.doctrees/cli/datacollection.doctree create mode 100644 docs/.doctrees/cli/grid.doctree create mode 100644 docs/.doctrees/cli/index.doctree create mode 100644 docs/.doctrees/cli/leed.doctree create mode 100644 docs/.doctrees/cli/main.doctree create mode 100644 docs/.doctrees/cli/merge.doctree create mode 100644 docs/.doctrees/cli/mtxop.doctree create mode 100644 docs/.doctrees/cli/postprocess.doctree create mode 100644 docs/.doctrees/cli/schedule.doctree create mode 100644 docs/.doctrees/cli/translate.doctree create mode 100644 docs/.doctrees/cli/two_phase.doctree create mode 100644 docs/.doctrees/cli/viewfactor.doctree create mode 100644 docs/.doctrees/cli/well.doctree create mode 100644 docs/.doctrees/environment.pickle create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.annual.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.annualdaylight.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.annualirradiance.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.abnt.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.datacollection.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.grid.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.leed.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.merge.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.mtxop.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.postprocess.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.schedule.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.translate.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.two_phase.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.util.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.viewfactor.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.cli.well.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.data_type.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.dynamic.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.electriclight.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.en17037.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.helper.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.ies.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.ies.lm.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.ies.lm_schedule.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.leed.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.leed.leed.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.leed.leed_schedule.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.metrics.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.reader.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.results.annual_daylight.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.results.annual_irradiance.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.results.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.results.results.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.type_hints.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.util.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.vis_metadata.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.well.doctree create mode 100644 docs/.doctrees/honeybee_radiance_postprocess.well.well.doctree create mode 100644 docs/.doctrees/index.doctree create mode 100644 docs/.doctrees/modules.doctree create mode 100644 docs/.nojekyll create mode 100644 docs/README.md create mode 100644 docs/_modules/honeybee_radiance_postprocess/annual.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/annualdaylight.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/cli/grid.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/cli/util.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/data_type.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/dynamic.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/electriclight.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/en17037.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/helper.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/ies/lm.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/ies/lm_schedule.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/leed/leed.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/leed/leed_schedule.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/metrics.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/reader.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/results/annual_daylight.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/results/annual_irradiance.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/results/results.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/util.html create mode 100644 docs/_modules/honeybee_radiance_postprocess/well/well.html create mode 100644 docs/_modules/index.html create mode 100644 docs/_sources/cli/abnt.rst.txt create mode 100644 docs/_sources/cli/datacollection.rst.txt create mode 100644 docs/_sources/cli/grid.rst.txt create mode 100644 docs/_sources/cli/index.rst.txt create mode 100644 docs/_sources/cli/leed.rst.txt create mode 100644 docs/_sources/cli/main.rst.txt create mode 100644 docs/_sources/cli/merge.rst.txt create mode 100644 docs/_sources/cli/mtxop.rst.txt create mode 100644 docs/_sources/cli/postprocess.rst.txt create mode 100644 docs/_sources/cli/schedule.rst.txt create mode 100644 docs/_sources/cli/translate.rst.txt create mode 100644 docs/_sources/cli/two_phase.rst.txt create mode 100644 docs/_sources/cli/viewfactor.rst.txt create mode 100644 docs/_sources/cli/well.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.annual.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.annualdaylight.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.annualirradiance.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.abnt.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.datacollection.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.grid.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.leed.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.merge.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.mtxop.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.postprocess.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.schedule.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.translate.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.two_phase.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.util.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.viewfactor.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.cli.well.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.data_type.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.dynamic.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.electriclight.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.en17037.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.helper.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.ies.lm.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.ies.lm_schedule.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.ies.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.leed.leed.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.leed.leed_schedule.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.leed.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.metrics.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.reader.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.results.annual_daylight.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.results.annual_irradiance.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.results.results.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.results.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.type_hints.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.util.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.vis_metadata.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.well.rst.txt create mode 100644 docs/_sources/honeybee_radiance_postprocess.well.well.rst.txt create mode 100644 docs/_sources/index.rst.txt create mode 100644 docs/_sources/modules.rst.txt create mode 100644 docs/_static/basic.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap.min.css create mode 100644 docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png create mode 100644 docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png create mode 100644 docs/_static/bootstrap-2.3.2/js/bootstrap.js create mode 100644 docs/_static/bootstrap-2.3.2/js/bootstrap.min.js create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.min.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.min.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.min.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.min.css.map create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.eot create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.svg create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.ttf create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.woff create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.woff2 create mode 100644 docs/_static/bootstrap-3.4.1/js/bootstrap.js create mode 100644 docs/_static/bootstrap-3.4.1/js/bootstrap.min.js create mode 100644 docs/_static/bootstrap-3.4.1/js/npm.js create mode 100644 docs/_static/bootstrap-sphinx.css create mode 100644 docs/_static/bootstrap-sphinx.js create mode 100644 docs/_static/bootswatch-2.3.2/amelia/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/flatly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png create mode 100644 docs/_static/bootswatch-2.3.2/img/glyphicons-halflings.png create mode 100644 docs/_static/bootswatch-2.3.2/journal/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/readable/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/simplex/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/slate/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/spruce/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/superhero/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/united/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cerulean/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cosmo/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cyborg/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/darkly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/flatly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.eot create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.svg create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.ttf create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.woff create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.woff2 create mode 100644 docs/_static/bootswatch-3.4.1/journal/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/lumen/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/paper/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/readable/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/sandstone/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/simplex/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/slate/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/spacelab/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/superhero/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/united/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/yeti/bootstrap.min.css create mode 100644 docs/_static/custom.css create mode 100644 docs/_static/doctools.js create mode 100644 docs/_static/documentation_options.js create mode 100644 docs/_static/file.png create mode 100644 docs/_static/js/jquery-1.12.4.min.js create mode 100644 docs/_static/js/jquery-fix.js create mode 100644 docs/_static/language_data.js create mode 100644 docs/_static/minus.png create mode 100644 docs/_static/plus.png create mode 100644 docs/_static/pygments.css create mode 100644 docs/_static/searchtools.js create mode 100644 docs/_static/sphinx_highlight.js create mode 100644 docs/cli/abnt.html create mode 100644 docs/cli/datacollection.html create mode 100644 docs/cli/grid.html create mode 100644 docs/cli/index.html create mode 100644 docs/cli/leed.html create mode 100644 docs/cli/main.html create mode 100644 docs/cli/merge.html create mode 100644 docs/cli/mtxop.html create mode 100644 docs/cli/postprocess.html create mode 100644 docs/cli/schedule.html create mode 100644 docs/cli/translate.html create mode 100644 docs/cli/two_phase.html create mode 100644 docs/cli/viewfactor.html create mode 100644 docs/cli/well.html create mode 100644 docs/genindex.html create mode 100644 docs/honeybee_radiance_postprocess.annual.html create mode 100644 docs/honeybee_radiance_postprocess.annualdaylight.html create mode 100644 docs/honeybee_radiance_postprocess.annualirradiance.html create mode 100644 docs/honeybee_radiance_postprocess.cli.abnt.html create mode 100644 docs/honeybee_radiance_postprocess.cli.datacollection.html create mode 100644 docs/honeybee_radiance_postprocess.cli.grid.html create mode 100644 docs/honeybee_radiance_postprocess.cli.html create mode 100644 docs/honeybee_radiance_postprocess.cli.leed.html create mode 100644 docs/honeybee_radiance_postprocess.cli.merge.html create mode 100644 docs/honeybee_radiance_postprocess.cli.mtxop.html create mode 100644 docs/honeybee_radiance_postprocess.cli.postprocess.html create mode 100644 docs/honeybee_radiance_postprocess.cli.schedule.html create mode 100644 docs/honeybee_radiance_postprocess.cli.translate.html create mode 100644 docs/honeybee_radiance_postprocess.cli.two_phase.html create mode 100644 docs/honeybee_radiance_postprocess.cli.util.html create mode 100644 docs/honeybee_radiance_postprocess.cli.viewfactor.html create mode 100644 docs/honeybee_radiance_postprocess.cli.well.html create mode 100644 docs/honeybee_radiance_postprocess.data_type.html create mode 100644 docs/honeybee_radiance_postprocess.dynamic.html create mode 100644 docs/honeybee_radiance_postprocess.electriclight.html create mode 100644 docs/honeybee_radiance_postprocess.en17037.html create mode 100644 docs/honeybee_radiance_postprocess.helper.html create mode 100644 docs/honeybee_radiance_postprocess.html create mode 100644 docs/honeybee_radiance_postprocess.ies.html create mode 100644 docs/honeybee_radiance_postprocess.ies.lm.html create mode 100644 docs/honeybee_radiance_postprocess.ies.lm_schedule.html create mode 100644 docs/honeybee_radiance_postprocess.leed.html create mode 100644 docs/honeybee_radiance_postprocess.leed.leed.html create mode 100644 docs/honeybee_radiance_postprocess.leed.leed_schedule.html create mode 100644 docs/honeybee_radiance_postprocess.metrics.html create mode 100644 docs/honeybee_radiance_postprocess.reader.html create mode 100644 docs/honeybee_radiance_postprocess.results.annual_daylight.html create mode 100644 docs/honeybee_radiance_postprocess.results.annual_irradiance.html create mode 100644 docs/honeybee_radiance_postprocess.results.html create mode 100644 docs/honeybee_radiance_postprocess.results.results.html create mode 100644 docs/honeybee_radiance_postprocess.type_hints.html create mode 100644 docs/honeybee_radiance_postprocess.util.html create mode 100644 docs/honeybee_radiance_postprocess.vis_metadata.html create mode 100644 docs/honeybee_radiance_postprocess.well.html create mode 100644 docs/honeybee_radiance_postprocess.well.well.html create mode 100644 docs/index.html create mode 100644 docs/modules.html create mode 100644 docs/objects.inv create mode 100644 docs/py-modindex.html create mode 100644 docs/search.html create mode 100644 docs/searchindex.js diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ + diff --git a/README.md b/README.md new file mode 100644 index 00000000..ebfb3665 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# documentation diff --git a/docs/.buildinfo b/docs/.buildinfo new file mode 100644 index 00000000..7712a2e6 --- /dev/null +++ b/docs/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 113038d8757709e93cd94d7ecc074a06 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/cli/abnt.doctree b/docs/.doctrees/cli/abnt.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5cc4e9def145f77b3963c425f36ce100e684887a GIT binary patch literal 15987 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 CUMe{N literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/grid.doctree b/docs/.doctrees/cli/grid.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a7ed0f12ed5c078344c9a6c7e69884203a83e9ed GIT binary patch literal 24876 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 t9JC)9=3wk{{TZ@?|lFO literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/index.doctree b/docs/.doctrees/cli/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f27185c8cf6afcbb676c3e16a39e76d4c884077b GIT binary patch literal 3234 zcmai0OK%%D5O(ZHmTXCW0#K+fbO44{feBx5KHiXAo$9G2;BlvP3c+^P|i-pIH-g=l*9G*KxyG z$)VHzO&KUxJQU!b}?onFAhscGv zk1T(L{{#FV;{OQu6rYs$JF3*hW4Ld_eHT?WX=ZYrELE#2q*z08OzbURu4KLUK1bqC z=r$KcIZ#n6%OV_}!WUAIGO3GKMZIDpl$=(5+VfKrWr8_gigrk}l;p*!DOajo4M^o& z^68kx-q=!B`cM7LWaV<7R1)S{Y?P`o+qj=tnUq?Ud&{&_%vbKqXcgy`LS>cPNwwJ{ zt1cEi$pQ3N1rI%`W0fa-ELC-1@vZn?{3w1FzldMOGZ6_Upf4su^3X}yEa90K#nWrR zEX&GP0>UTCjEc+97BWfDd6%JIn{5Ogou?yi5!TbSuvIpiGg@6hcMA=?NI2E}L>!d0 z-UL*>Tm?wjsmpsbwJgiHE!Zk%zQDO9%m8D&!B`2M3ZQI`w=1$G>}@T2YmU7oLmNmY zeAk!_^>XF-#u9YVIq%1MLm1+5xasSXf~g|(>cpa1OTuV*S?_n=o)_&nyB5&{N=G@J=P+ikFgTD!qv2qzZraftqDcL(lTe zSRW~V&XLabuqBvkmaVYIXA)WT%;#>d)C#SHkMarJ4W`U$WDy#cvlNmpN)~gv62&Jq zau#tNn*>@#=;nTW^x2V<_`Z8}Gvd}7i#F4V0+s;-+%5J+*r_tVWTjPFDZ;_Z&WZ`~ zZx~cY7Xi$V-o3i9ax(1F1;8avAU_HhDnef|J;~XGBi#ws>*()r!}8eJBmx-#HgH2^ zc^cZW(PP{Z>5$1B4Wb12i1ohXrxjTBv^j&gI}C+N8zF5}P{tmd?StrpFh zG2EsvIC0#P4hloo64ZMe4Av|`jeFE=fQ_C2g-WK<7vJnY41#u=PAkq#t$9Hj~+bv6!{$3alB%l zBn$H&&&|`jLU=vn_E>U1E`5LvhQg-`&bpqB&_W3jeJ30MkZII(W^;kaWrUE+u-1l6{&}F~pXlaK;-6+@9GEydH)uR&*V!;p(3STuFvRtMRr_b^X zE@+S|AB~y=@WMbM^%xkaNnxK@!sVkCHJK82mBIK!5z#PqRsb@1jS{r)1tJifd-%8& zL+dQ!cs3K7ODa8F1(i-mMm1n4Rd22c z8}05Di`}``^3eVj`yg8DX{flhYOCJC%mDg`G4TN-cw81!5nhkYlUn``S$J7|hgQH; pj;6vK?NI&7VZ$O<#M_OyEZ}xMw*W8`s@+yXL|1bHJ>~i6_&;&*0T2KH literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/leed.doctree b/docs/.doctrees/cli/leed.doctree new file mode 100644 index 0000000000000000000000000000000000000000..728c57c06a24be9641895bc3a449233458970830 GIT binary patch literal 18716 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 I45n`UA2c>I?f?J) literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/main.doctree b/docs/.doctrees/cli/main.doctree new file mode 100644 index 0000000000000000000000000000000000000000..801ef6f9403ae9befdf79bb03941707e66ae5924 GIT binary patch literal 414537 zcmeEv3AkiMbuhyWGt96FvMGxf5P87#FbuLd4B#*e3^0o`0|*Fjdfw|d-IspdkM4f6 zsJH~T(T?#8P2A#6Bq0X(xQqJ|6O9HHHR+BE8V!jUqfry|Kc}`+_ujfyw{G8NnD6`f zKKj17-KXl*sk7CoQ>R{Z&|Py5m~#OB*FB;=Q>`_2FDXw>Hky-_cCUNzWOHJ6y3*+M z?(CiU;@<7OvF^fFc~`qR+nT8Kx(C27CaSgiWUJEX-Q4RQjz90z>g^>0enGo3(Wx~X z3cPwyb$)fh&AqYe!tOzxTBlyozUt1KF4r18{2soZx3#hx`xS3r+T;DtpD9CconH0G z?!s|}UUhDFzQAfjcV4~LsPs0>ZZCHil{=kQZToBoMuXVTtxdKO(*+ata=Q&L;qQYQ zf?)W*?=5*zp)@-9u zX`QpH*}4^8G%9a}x_4og~X80E=V zA2_?cdI%>zQSS-zMfW6Yhn$$lx_%{y3nN>~N4BAQGSaX56d+pl6qt|G;Q!O%|1;qK zGl3x0vl$^u)sy&7VZs)|%#?Su$}?4cPS23|1(G0vMv!2lIXzu&OtzOuOf&zUaDHZX zoG*n*b5ZQ%tLFeANq-U<>nDrdvLwn*fCq)f$!SYO1%yuT&?Y>*5Uuoc)7I$g$Ad3WA&se%(F(A`K{UQt=fc6 zkp&xPP}bXWCe^=brmERzY6|B7x?K$29sqN3K=+_pW3sYa>yfLHR37av06o#FG0`6D z&YLOMTD|TH`?Lvm3{ZmvO*Wp3gHmZ{rPW3?);(updXm2`SsPLi)%hDby)x2pr(miB zy7NG{>Xefz@c>Yu@XdI;2CAkr+luJMg@grHpa*mpvR^Z;B-Jx$h}SUvd2Ck$pb6-u zPrz9BVCcBSnghiTh_F8^y4Y98tJ`oae+pxHHE)XZ1)HEl89rz|P*G|qF_j;gr?KuK z*ctF7@9!`KWjZ;%(|060tx%&cEu)SC4G-=1x{I*&=JpWGPcJfp?!o1H9s5AFUVRN% zi1AKyVjNUgr`nJr~`w30lr_(1+pCCjTbes~_PjZy)iu~h1ST;5e2#Q~$s~~D;ve%u@ zIX_0w`IAj+cE6-(<%Ut>R* zV(6Ekk^Bir!zRV-SNb%O#X=U>ASX-pgm3})x;C4M8m?O2Tiq@#Vs%oPz;HeQYa_St z)RU%~^~p-B)M=KY+@-9exbEVO5A%ZLP=OXRs^D`@Dr z@PSCy>%sO)&@S(+0P)(vsx8+s;{PCZppgnMGZktVtQXCXq7FD5&!B)@h^dy7Krr1 z2XK;bL0-Y-0W8R+C-90W@yDuvEMIg_24ojQ2!PrNR>0rmoRF6?W*@8GseV6~4Gu$? z$9CD@#3KVMkBn8{TzyMqt*WiI!|y3rW$Qt<@0Q&fm}ac{*VT6!+k=I)tG(`livuag z_$LkG*9sAnOPZ%sqTQi7nPvCUmxRc?18ovF6g9htCFdBXGxnBHIm&^G_e9Y8dyFw{ z_om`SkmRDmA}7`NS3eMCmk&ccCHy|jcQ_vgSgC&W%<9KfR79~MFw=vACx9bA5#va3 zL#Jw$`s8@M2H|Y-I0eJPE&%&F@eOVe2uK!7ayfSP0GT z6`jpH852L3%ULT>6@plb4xVDI$ACZnb#L|id#gX#Tm9kQ z>W}tTAKF{}u^w5H=7T(ig|Lod8)j;que~Auyu)i~MR^NgY`2fn*m6g(Hv(k^TM;GE zdL*DOC%|IA=Sw&cM9ofzcjFXr1tNb!^Yc#Y{Mc>F+ZC)5uAwZou|4AK@J-Mkk9`|8 zI2&j=U3b4lpli_GN|SYu++4YBw${QZh~RIjd=1|a8NZ-NVe%DXY8d0zieezlpH+yt z1z!$Awcr=S2I2n~?5!X6@iE|!jKZJGaR*VXj8YV7G1k4MaMuB)kvi}d$b}kcOeTMY z)aNp({fhYMe*{ZN{T^iuyIB5G!73&jN-T}-X=3@G(4S2#ajX`xd_O9_# z6apzFW7#%rCdBpR z<52%5RPN1#3hqmu&n`_xGwlq+fGX7L3P|71{7NDKun-m*1-7vm( z-8E}yn2&kqjoNsMVIEz3?{} zffj>^Y*!pR&&J*M?Fw_Jv|VvnDKcH6|JYli=V=a9Y}-F(RMhrQ_i)1`!;VG#H6e4Z z0~yztJ;py-Z->}g16d&J2Nx+qTV_w;_7{@a^~*@P{i9 zbTJ4y2sk-I+E$Fv)!G}9hIa}|NJOo!akVIi2qMDek@-W?`|WjaELJOHC|ETfjRXtw zTU?cc2@)hu-<%R7Jp#~Zg$QsgJ2qgWA1oBqF3}zq3E|5DEY%v09Y)=!&?a-f1AaSe~ zft(cRjzS<`rAU!OAYY*na|@&#M1FyMJNDKO-+_+-e`FI#nhD3YShm2HwoO{dE}LnO zR72T*Y%PYehMOHOwgZ^lsKwLamW|qZc#=Y{>G?lMHb3gcRJaNIA%sY7!k(uN1;T;u zU`GXN5R~!sBRktQ-JGmV?ZJPwD~&dO4=B-r!d$R4hA(-I0k>RFwJvTLcH&ea8!ph7 zHUutp!)oUdQV-k@+YBE*%*VH3^tr?J-$K&y9Z#HBJ0l%BU1{y8$OLww@uM$kQhw$& zDacqqL5L({owd0Fk*(PYJcCXL-r!&$3lPv_bNRGd19AbxDFZqP$KJ+i zpXs+m^b_)o0XLhEkB%X-*}P2dF|c#5gfJc+YgBdxP<%pil;j<$AM=3HXwDqPXf{CU z8PJ+g@?m+fM*bC&^hjexr2XJ_ zXLb@Qt0?tPFR16|`i!qCSR&c86=9i~fU3zA^A?#2sEITFlp77r5qWh6M?|+inpd)J z!=`Juj`L)6c7PHOQD*&bQKlI%8J!?R_c2evmZ*e!|I&Wo6TF9OHmHS;h>Kc%OznOT1RIKbB$}06$TkA ze6oKaOPuy(E2qU*akvw&P2X_>*s)R04kXH{RxNmMe4UHE^}}WO81RQHtS9tvu8l7= z76qBFCR7z1!h8X^GGEshWWGcWky<45!po7ao>uIvQnP|qEZ&+*!BXv;Y#NSB+BEo^ zm~y?~D;bZ8E(h#3ZJmNuoH~?EbF`Ok(LLz?Sr~Ex@*AUfV{iTNJ@^>#$9`gr%AKK%5r8XW zw4oqlRBo4$dwb!hker@2==f5(gEmMs608uiV6r%fytFv*H*wxq1oN0V&u($Ps9=k+ zIF9zxEzS=VBK{V~+$mWcD4{E7Np7~&8=~XS9VpoBix~y7FN|AyJ=O}tVj1vv|EmuBzSgFy#m4pzlhBu^B;Sym*HfccF;347~@OYkw^ zk5L){Sdd&*kj9;w1}kt$elA9Mrl@5-Zx%5GRM!3y|D>gI#kmr^^6e-Tq$ zVPy)teqN#3S#Bao%iY9J`>u zLBW~@9iy!h4UVJ;!O}}YL43 zr@WmrxC&o~|AwG^(GmF>Ve~T}jM$ko%>w)wfF0hBJPn0|aBcUB(@rB|K#03i0XeGQiJ&o-V*N5jq ze>P>0!;R;3YvOmFKsTxEhd=dnqauaL#yK?g^$Ib!mnH|HRH*mn&u!RSKWyP+z#kdK zJlEzA2;JsFgf5b<((7KGf60YX7j4Z~><){8$K-A=(w56z?3W~XuM(3kb#-*=?Sl7m z1zU{Z8QaqY?~kBAo8aMiErRzFf$k^-@2?dpatPjED#W7HkIO6CRym0Lg7+Ehtsj0C z9|QgvvEUUGRi@0a?iIrc9kt{ua0@lin6P~p>B)sn`xOb=KZ{AuBWMpQ*kT0D*q$b6 z{{;Qn1P#Y(5wvd#bVng*|EEZiL(qP!5OWKf97KLWd*UJ{Xh-8?5VA)$L8F;)90^D! zw`r$kjw;|$1)F!r#*@5Vu>hhgSoOBsxh*XE!8qlvtmhEi+CnfP=(u};8q9-I^eZm zGTbxTPKch*^rdHb8A9l!8Tw?*v%GN7PR49NK*}?B9stO6+C^BIOur>MZqG9YJj5^_ z9YZ8nKF{$MfqouP8qG{GqajUeh-Jw9dz?g9lttv<3sI!geZ8ErT~u=R1BFTwr|Ui^iTA#R(7Pq6phOOVz;Y5M5(zL;pgI={OttS8G> z$21Pip?tQLr;|R314GJ~?}Z;gvPaTIghW|(Aqz{qzu!9N_NDO06s$5oV3Jj;gLe$d z(O!DW$hQ%L(=e9sA^3lf6*bJ!!j>x zaHm|Gz6AogQH*(mW|-MQ z3~wmdys;xI;$Yb_q_n4fJGr!j9W0}Ef)(uV)T3oM8Xk$73$R*JxeLUAt!C~8=5uCMAXkh4Dlp8!G=#txRLtgC&E2C>O21l7#) zAKz|>nWmR2l1J4>91M3UO>e>8`r%vgG2oAkrpY@C;BGIf6t&hX+|oq0;JcfL zmsdwtfO};Y-Rwt`q-O2lyuZ-=HnhZY){n_?RaJcb3 z6V37alt9<2&NMW*=arupj{f`u4Zn2kx$S?N4$KLwkAMi2YkBnlU z%OeFLys=PsFB)gde!Dc<4sdm;wv+UGS>4lUtI&br=UqwhASUo~nIZl~Lbt<< zTX27L5+RcNqq*uK3d52Mmc}saH3r-bJ_4rPv7^-D2{t#h4u!5W9smME;mDhUB3UXEtA(EW+)b(hxGL})y z_G7~GFTAis-f^TnFamK7VwVsBnK*HAbOjVp{E!#I+BWeA7HyWDr@uDowhi0TT zM?{a^co$HN=A?r7?R!M{JOiIx0n?n@{dqqsA>Bgz<#1f@#bOxO!zm@MuI36UWT-O5 zc|hj`nWY!a-Dtv1kD04XB^oUOxZ2cmoP9_Dr(~1Jx={hU$;w^aRCiJnlemKC#fInOTD4~7!wc7ToZJT5*kJ`2g z;54NMzSmHUn|&R6t<(ibcKE7;Xpynua6JHrkKo~ zlERLp(+L$Bc}KE*vI7m9vNoeZ$~u}&C-8{ABt#ZF5b>smuBee+vlqii2!xhgYE{$! z2i=4L48)?Qe<>Kys;2jkY&9{X`vw|3nwRty9!$#-0oPgl~oqiy6C3 z3^ZxR^kPHDt=D#T%JnARyauwORvW3`6GcBOIx>rjLtB4JVQDBEG*-yf>)-alPu2~3 z0DB@qs)l_?3gV{dK|zoq$gEm z*l&@y-b;y-;%WtAi+rg`%n+_RPgf%G`r$f!4ESR|@sPZ#|0k8XNA>>%aGHn2D?pZ1 zRqHw2t=DeWvFrMErdwbEo7pnM(W%y<_@{ z6woUiNZI@+Gg9O~87uq?tc>3gT7Tw1%jQcN(IQPJlA<-qGeS zU~m2Ki})Du$9`grysG~vrNN{6e*!qo7|Dw0;kS{To;IkE>i<6w%p*OMC=1ywPG7+m zV{shqrCXfeDn$G(j=58^I2o(|&woOG%WX!1?2BINU+60R6{(S<9Z1-$i4h6injnj2 zul}D90dljY#2D`UT+&ZW8X&$fom~=>ji37CE#7fUr@pu zj)eFnR+2e{_{C~aQ8OF|Lr+c;Aiog55qs;0e~ym0>ywr6bZh;;}_5TlA8OJW@?^Up7LHDZu|5??Tzt9^I(S-h8(6&wJKg7OI75e)G zYDuBj1M+!F_zS_$14^?0JuBtnLL4*T52~>l!uW+mgn#aXo{R`Tj6mrT;YeA3MnsAU z{{caHOgQp0BG{ZG;TNglE(gILh2|aJj*JT9ApE1kKSlfjJ69*7`oEk&xsoEbH-wUz zA12w^4B?6jpNYilhiBnqz#kdaxA(dKC0_GXRDLjceZ_2x>p9~d)&G+g!*R~vZ8)OG z_fa_XbN(BV%v@liKO~8HmUSlVR${$^HChSpJYHja#P#8o(4S4&<8b50i!~4LDuHfN z*=w;v!)bm&LBlsh#@iGrOg7G;cp3^Zx0fadp;V}MyzLd(TR+^3j{$#V6!To!ogj3M zBIF6NFneiq)*^cm@VP=p?P8LpZjMg1UC`dF zV2cqnV|$vQy&n3r2^x;oB4}?E=#E0rKBGvHL(uM5h()O%mrq;{$wA~7wC`YV{qVc^ z81P3nL8F;)9IF+{DV)n$x{7ve-upyu;@mzz_^e@LKOoMr(J-+8T%0G5_gXCh+gQ$8 zA2i+B-JFrxP2yi9X20;_4?JJ}p9qmWU;Xq|&FSfKW3r9)sCG45w?dh!PBqwEo~)Iz z#P@U=i@CgADcE-A6$bLx$q13; zud_F@erwG}8*Ys4?5e=kkqm_-iz&A9f+3vG@xmFo>0HNoN;Z)(!g1ch(E@L&MO(MM zwOWCaZ!@zU5}E1Qb_cJ?Rl>Br)+o33s2^alH#l%Z1d4@@oaa6PXl(21#0$aREq7_4yy^7=N{vl!d{9-UA$G{MekO#n#ja-ouQNdrR4l+w! zZ!M%5skQ4iZ`nG&e(STn4|NB@mNlz3Zdi@L!PYC+ZDxN-3444Y#U~Y5{?CBUxlem1 z)Q;b2?{|9f6Gn5mO_Wtv@}2gEh2^zY20;;T&Xgi%%Dl8Ji61pvrDmhj>t31pbZWAP zXj9Pzrr>bP8SRszs01rG_RZEfAeKBWad`CSl1JmON%X&Lohth(^z#Z<*(tE}lvQwq z30ugoPP`{{zO9-xt>)|pu#M=DP6|H-ZQB;HUt!-zw+1vp_>4deh8Q~;tZxmRwoy7M zniB{2|Lkg#Gb3ju({G73Key5*zGTJVzlQz83j0w7|K~o@!x5Ij{{s+6Aqs{en!>@LJF#^LVnY3L^-6L3e}{)IWwX|JRaT#ZQIP*^V#>Q z=BzDH+h^wNtybDN%-Ne1_MnzQ#Jke4|Nj|GsZ1q)BmUX9Ld{iDwSb+h#k z@j=?PwOGu38KC^l))yR5;VSq+xEgJ0XMs*O5Xpq8{zT0Hs1s}!FEa64)_fcs}*14i5r!jG{AaQo_PyD~Lf$0+1X6XKFH zttM>Nz-A7_iCdNSY`xPCrdrME;Jje-6_;aJUz4gNhd<^(wlu8P#0&Xl!OYxnG zUib20G?ZwBX(vR_l^~IfGNr|_%I%3-trxbDwvp36?$Fbbr4q*r%XRQ}VmS`ogXK@8 zzM~h!i7yb$BrRB!rR+ZWa}}&n*Li0YIoeA<0Cbl^#9vFAJEa3a3v}{=s#gCd8ou4p zz3p(RxqB6+D~5)o^v4*pd7R@(GPB?|>p7km0Y$>Q;Uj*IM++$I5>&I=kIT2fK0e$o zCHGv#)+6lngTe>liS1P`307C8%3vBLpYbu^k5Oyzbwz1#@GdVIMt3);#?tzta4I#Rz+^9c80qP)wHv6fv4LO( zekMKD151E2kEGzA#Bu*4m?n>={-uH~MpHZ5OV`wg9|J_QxYo8Kisnv9Q_tswmDH2} zBnqD3=-j5K&7CVf-Cdy1Cz=WQZ|eR`NB7=i*VQ_5WA~Xui3)PHRjdCN`Up>gQCPJ4 zBZAYCT3z3WIdbD{2XjnVRb!L`rKJtu5Ct!{QZTMPV{Y?h0vNV27Hh?HxP{Gd!eWwJ z7Rg=k2cxqIl0#vp!jA^}>6Rw4N6Dsj;%^tSQ*( zVESmBx12P}meT4U6kI5oB8Hlss^`U%F#23?u_f)M(N10kE~HX=mIXN<9Ncim9Z7NM`zhJOe~ z5`GUp(rox$s}GoS0R9JSkNd>1lg3;N@g2TV*m5RH%8zRCZRQp;GvI!!a|SvZJ<` zephFH+;Opm8Yp;1`uVy`kivXrrTvQd@-piT*fsgZ3bq(cZfuW~MtA}AXN%qASmS4Y zG~etZfv#1s4M*q%`3&C>8OIeVOtvI0r!gn}ISMhic*{ZL7w?_eTR+@|j{$#V6z{xA zBd!yzS%r;qUVToqCR=AG?6k&w#ch!e8Bx7{t1jV_Yt>*K=~bUdyChcVl0L0`Js=v`DHGF!7$%v zs!pZl&s^Hoq(-7%rr<2gv9@FAoEn`0NCw3h(a$6|>90t{K4YB@dtl|03RY=Zuu~My zJtU4HL~TeO~B*`|Qc%8@B_FcaJ@y7$MnU@us zy*~y4^+8%!7Sa$M2~e(WQ*lg9o9DwFP{w?J4StaWUd#8#xpP@caYjw+;Ma-~?NktF z)Fj_Z2cP8GV8dBDt&~$Uglk853(i$P+=`C@f4CN8LRmjH;l^}(M9JwrkK4JT;YP4X zS~I>jX;iuX(>NKaf@il)H3ch`%$$gA^33&ro@&nDJ{eIVehw$0ZJT{+vhP#v)099h zX`i$uHV@Y(>0Vx($Ad&2ii$A!88-1c8yowN;+yH%l~6Y)kwCA+Y>J;%l`|4jilX*GLv1) zeMZ3=wVZc`x}&}HB$a;4ESTzn)`}k)FWj0U!0#$Ay*z%Dyr+Ni@`@^_dgve>8-8v zXZK$w*d>pKzF5H)qoEz`rEBQx6e9i_+T1B=XqnD0BwhZKq;n)xwP4Dm?bafA@tl1@!}x2W;FVSi zI*j%j0qoH6Y=tDzS7yjNwl$8u^}}uW81P3%mF=C%Kj}r40=J*-oB8oA)&_^cJ)A(PC)D?-2gevjm%dOP6$GYxNu*IluV|%0}!WTe)wy->oHJ<3G zxnVC7=vsx^kgPArXZVK5c#k55X)Wgv?Yk9XQNtMr!&5qP5cx&>lh|87ydNI}{>UiW zdH21=W`b^##kL3n9-VIzLPpJ;}$hNH$N_G-$IgdS<`<;T=Jlp=sbSX0}8en zVKcU;3ES78Kbx@OU@gM-b%E|EgzYzq6gh7q%l#V8ZqUd<;VN$R=zw z6OJs^q@B`oie2~QpdS@Ua81c5*08Z(e8aKPFtGoeC*r}+&$zi)J@aO))>~avJ;8NP z&Y^nQGnq{leMv%h2GTy&uaE0kOk;j3LL}3e&(d$r(J`PzW>I}ju`k>+-Qb(fK)#hw{Qu0kPjnOQAI1d%@1j7eC zsc;Eo#C6Iw9Qtf4XwPmJH8M~&Vv$q0NTC860*aiLYK>B-24%x)_4@2IT)+jl+R5P$ z*$R#O%X!9qFpT>P(Q!vkZmglHYX|l6cDM^{GC1|=B{w|F2+C4J8$VG_UE}v z)oU#AcPjjwf2Sn!T2pI3c+sDW_I~i9H!Tj>KN+0-r)-z~8(W5-$hP6#60JPaw?{#P z%ixBzc153H&cH#X48;wr<(*oYTP_5hY8i?cHYVz`lTh1M&h*gj&|E(>l5y^6)h65H zwZ>F)N!SLFMp`ccACgu2YV%7OH4YATmg}?lEvR55g&OCu?a(-XIf`*EXjdBTW=nCU z`Zx7E=R~kSnVoc@Nt3cf>lDLImQ3eHwFAmOB6e3!HzzCg5>{AS9;^(mgc`|vwpS{_ zdVI|buQ49m1%;EL`tl?&8!NZ0$rrEEEa#-S28l?=59gLYE9><>sId3rG;@nHH)KSk%nwFfQE-ElukTSSfz z=br`aLc5zbZrZwT#g%x(${k(=3+e`eI)pncC?zaaGz$qva?d}g)hMAi0ris{mfmVt*n6kl(O&va`&$(vrueP>XrZ}N+G&UTlyp){ zeGz|66#W|qGPZqoGct;zcspQnrXd+A@t)B6m;)W#F1ryOQu$+yfxFihCxE(iSohpt z1)~bz4IlA6cgcvLy8cLvJh@|_=ga-^O6~=tR|0uxHMq+H?R2$L+ffzQSyaFcL9q>( zc!|q1*e%P`g(qk*}*68C9O(zxkji^8_D4AcZK4<7gF%y9aICwshMzF8HcK zNBA2A0+kv~5R`90Cg&{GmbH(1;UzKye+NLW?2H(Nf9(d5nSnTJmscjvcxqGl12GT> zUNSRK&bSN(lJYRDr&y|qlv*={D>LxylVDc*;bMFY_`|h5CQNRwz39<-Hm!*wJsW6E zc{b(Ics8i}N_;8T3s)fh<;j2%xqcI|ZbmdNT!ALXRl$wLox(o`17mU6o>pp2pu?sS z2>!W)z0(_yZT@%X0-W?V*x#gtuSW8w1~=?Z+Z75{Y38AvHb;BuPTO{ch`-Zj?v$Li z!y@FCRE)hPdNv)X*jzR5=O*T zVHqM~k4Rqm79#%m8yt*yrPdxJ?SmNodt$)S(X(ey#r)g{6}3jSlK8m~dU7T4Fao8o zBo5xTZEI_`l3Yyu0pSvh3HcV(#XN-5wC=o$1mq7de`-BOruq!HNab!>t$g&p{?_!?J;aVLEZ?KIM|%@s@xg4~Fia;M62 z1ONw-Bm^GFu2v0P5PnXI=NBjsA`d9d%ImGO60>b_gY{=>XjXf|LQRqk%3^z;YI+a$ z)(_u{j{$#VG!NdVnm*`7m7=!pVCU|}QRsKR58EqHKG=aLw!6zslRARo-cp+{u!%)r z!fzqTxkZpaAufH;Iv@5J%mWIx7^7fpk91M^HR#WJ^n!gKEkC9?fnOKsTGfT&G?Sp6 z;Tt03Zxks^X2~J!zfy>~gN=%Sr)xQk7H_7e_In=GI6JQl0P>PxpTnJfpTOM}&dLxYvG zoo1ssy+^WY)}PZz{wmK%FnRW!(UC;bMwd;*(1w2_-mBoCLai~|Y^RSP4=9c1Ln9f@ z>|`x63Givw)`}!4tCr? z^ZPub!%JiT7Xc|L-FYHyCAWghgUyxpY`uerLC|K3EH`05aSy4XVm;ib!Y&gxxl)A| z&=Sq=5djP%)u)fI3x%CP?RqEzdW?U$bXp)^f1);1SrV+};}b`O zK_d?Gj2Mq0oD>~##GV}4o^6z7XG(Bhuhm}C+1*ig-0%(IvZNSXGRYQBSVq}G-p=?_ zE{57c0{cybR`<$$h(OMM@eT8NfSKI@q{)3$pofY;_Y3`w3f$tw0vK;Zl9S}+KPuoT zY^SeSO0k89@@eas$ICA^xi~1b;b>d-5-+w6SW{~2%PTY*b=gxe#r7+cv-L_Z+>H|u z+4K@TZOJt|0pZ!MmuLodKEz+iQvvh%V0dJO|AREZ9oFf$hc{oSU_;4-uzpm#G~Ovu zj`q^`yxyP?F-0`&=K{=~(w-OGwIoR^HG%$$D0zn_(zVKm`i!AE?TOEMhjqvwkeTVrJ}*@T;0 zu$=||jffyfin7JEfE=E-3Do}f|L6`;a_bBa@#m=nyj znmcQgnB?CGE-Ia$XqcS`fR-j&6>LM<@iE{JS42>#(_F!MO#I$#4cNp2h*2(2(f*xYcWog;1Q9ryeSK5mSe80f zI8t5(FS!@~8tLtAq&jG#R4c&>^=HyZ9avJ)MEsL@bIvKybLs-YZlE3&tf|=T>d4JO z-UiCiUb=xg-Z2Q9QZ{!=2I>%v#L_}V-VrTNcc5W2QD!vAL>-!#Ua(QomxRc94n(}^ zp&KdW)$WF3J>=%fi#wyp;obF5!h5l zB@Zag$Tij(ahQO00vKY_i?tI~T)x6{6R*a?3$%CL1@5}=+kDWIS(-N^kg`=QVjk&s z+qUzT8cux8AQ*Vd(Gy?tEpYW*0Mj(otQT$~N3#V$j)Y5=@}e2qh8slYXyV9S3utlX zOY7i9F%Sn{GDlO+y4ZB-o5YxNOw;cV60SUK0vIoU~B(4_X{?a zToiRX?H<9$6s&S#hgz~a+DrEczNHZHU$UAzC655EGm8;iQqu4Z(e;N8lx*IC871-# zj!Kzw(59xZ2&rEUlp_9uamu;Bkoby_dba~9o4;U0inP>Nh%8-@zYr&@)n9la^c%hd zJ}myiPBCzozfj(t+h6bprFr?1K+i0M4u9eEYHXv5FZ{C)deUF`4g#h73vdb)0tJQu z!@~%da2VuUVDWhfr)jWXcwr|zhW`X0hh>g?3_o*&NRI)>?(Z>tOAN$;m-HCqyi2Ab zSxoa7q!gGTTpq(yPJ@Z*hXFnY{IUOe4DG@^253on49_k+5>je+Fd4NME=6*CIts@E zG~54XZNTm*dnUIP=ECo!F=Ky|M!FcgO>-3-;Z-M2^(hrCQs zOj?EL3c%rf+@Z*A2g6IY#wa=3OE*gYs1WftO6E?68TNETv#q%Rxcu};`$j8d)`xRE}ld0&k?|*3sN8NgPvS;9)m#Xi_Qhxww-a- z8Oh2+V+fX5bIP~CvvUDVQ$!^%+{BXeEC6yW?cz($r@2Aok`qVnzvMhh48(z#Tyn}; zmkOA~D{aXsdD{%(T5{fm==H^ld%fV$b4IY_R9FA>!a9=N)7lqU zY-pF@OUX7-=hANJ+X}WAOYdke-O|5WA>wc8&7G2^kJc3uc0T%&H2oVLh}f*W84t*@Y#mG%+0V4OY9a&unRft~sfv#1J7|IL@+8MqfGM-{3V_aHe zXBBL8Tc6RM>Zj+nQ&B@upU~_ii!+Vt0GbDW;=?i#zRvDScEFRW@YoYRK8 z_4wU|9nifMwVzXHn?%p57d^GgB^AaeD+mZ1|EdWCj+=!lc6pHNV6IexL$^aD z8RQ{JCWed-{h29eikXF^)5ow~D{EM>q8@>ym{OC&H$;PfB+uZHH~#|xRT&oR5?Crw z&JUSb2X&n*TBsv(Z`@CK2t#NCp>M4QX!K# zS-RuqS1KfczSCEt@g)>S1aMM_JMxzb8RBrW^jK52fH7ODn7DvgtFVM43@hW&aj%;B z(JgBS-ZC{OT#l0x31bUMu#^ueAbVy-*NlpG1`LKSfJK9=ohFFkzy9EFH~ z_}bhlg|8`DO4wt1L29?=K)@EZHY1>@sOL%v42;=RyBsLk!qr9;NU@JG=IrLIjc*nQ z$@kVR=__DN;jQoy4_Qlg1J!h?7`HXnv~Lrb#I)^OB#2pGW95{%`o{>GM(#gWxX}dj{$$UB4|Qu=B^SlIunK2RK=PoJ*#TU8Vs@q3SA~Dl0y=H z7$?KiP!*hA^;yA$GTawsMZ3|uU%@K29?EDr+DkWD-&KhC8!dCEWVGUGR6+yAUz1Mw zi31s%0W%{*1}u?9C9p}nCv<-0K*wgxjOggb3>mn4Lm_*w(pQW~h}EQh9y$+y3Lh4e z_Hi-#q)8iTmet{BfMBO?P&w?vAp&@GSyrd|peM7eo`OKifUywwfd?FL=8Jo`gI|A8 zH!aI*8GQquacd7Jb~L4Y%!jIqrG%b;B^WSe^0>N zDR}}s(MnF2AY$|-nccr|AY$_Z%!rT|5X-X?n8e-^D(`ooV)FousE}$JV@#X(E}gXH ztm0pLmh~MluJ9iCu-O0Sim@l{|NfAL_4n49bGQ*-Rzr_UavTh^uq2t3efM5o{t$cX zhd;u{fIl*t6YngnfAgYBQ88EFJE_dfZ4SB0Y^k#}h)#o2&&tw#yLkd#t6DMSUJ2S6z9Dse zwjzbegvF&d=GBfV#N0wJ2a#XsFUQ{c;VOI#_#>mx=ZYzfa`!-OU=_TaMIlseGw)7a z4d)iag9$Pwh&Lk1xggSyh=-md*dUKD_iP1Qj3^r0(?oF#^k)-A9I8bWuNCNyLKL5` zNRdMn_b9~Nq9_NEUli}e-uht=9|Qi#CW zdCXsu+`PkU!ZB6ytq74!mD~_ZmEEDhy*{D`KB&ti)2zRO5W2}bh9+_ z_j-*SQzkF7u8Qr+1bj~TwmVWVOTJ{T+t-AS%mqut`K%XlwEV|UG44?LkIuxjtXHv# zVP*X}jpTtmBf*TGuSZ7`$y~~F{hAm-9#9(14@NSY9M`YO(c}Q7(L6GW(G+vpniyX( zjnRmIKe7?CT4ImGo7)aO6U;^G8Y%AFYj=A^<&TWEAvi3P%24^Z!qy^FEUON7B=DY@ zXLNXT+tUzGrObs+J-G@E$nsz%Tlq%H!s8d>0=Egcf&|L4RG`ue9GWi&8)m0B?cvp5 zut#?JGn=VFnH0h(MDy@_DZGH61s-r2{%1WRNC#_IMa1k;X80XB0FE)AXP01o5kJtcAu3S>~YI` z6>KPZ5&{uwtHwKT)6rh~#@FW+BBoG<{k}JIr?l~^XHIX*XJ9 z3Rdy&P)5tqUb@j*r4aEqTINp4XhrUOllDTt7mmb!lLHN#*)pR+W-EH#o4_Obk`TGY zfr!m;84=M97xHRB2M?IxA~CR9t|icIxEVeymg{se?xf|?vox1&RTsMGN5t!uot64X zFM``8(35d~yMB+Eg^n8As0y{e$_G7}&G`xhQud1l;A7dG#*5(Ih+weq7`+HizQt_L z=tXdE^}|@} zPJ^dgFp_)WekQn9GF4P_*}a4xE7)SZ1V?-6Uc#KSftnUq$7U7HosySexcyDoXu~&T zs1J9bWb+uzD3Qlty8KPxWcrGbI?;iYH=RgnjWL!kC^d$85AoahtUkoUz>47$V0acE z;)jA=9X>>k8{P!*m*oJZ$vNLTIgX{}G66ig6Cvw-(33vIS_HEC5XQ^lZa}bv4+w{@71_2)OI)t^*I4a{&HVq%)!47dI+rB7O^2_$HhWZ)aizm&X02U|-2y zKF-A53bq($!qHy3GjYE{#6RRk2Sg8(s3_a;g%tN4bXCn3HxZ@Bm;Z4Z5z~}Ls<4*L#PPh|K z0w9Okj=K}bxIv^lfn)b~C+3KOIPjA0gq(M&zDXd{+zBZKW(b!%aTTK153k0@fImj* zPQV6*z35c_fPWhkPfE4MRI^vmRhMiDq&3UzyE+))-u!+N-a{sl!Yjex?{P#hdEyff zD5{^zJdfy0QY@2#rR0qJnD}i9)@b6pcs?WE)@UOHIKBm3nO7G>0G*Q-xgW;h= zNk&Cn?@iFRVQ>BL?f4k*$0$_{Zi0>|>bav)Xw(y$V=86Xf@`*@Cl=}`HOkYKUidzo z0M8}LiKQJ4yslC;!>Si7Xa4KKZL$;cdH?arvBNP17* zuT?E6O*QM2;Ns-1T5>UVpUSfK9j*%%Y%$v3(O$at->eYv*Z$^CN&E8xC4$US{YPJt z0vLB7V$=U-L`eU~>XV2-NbD`4GVMUcW&w<-=oSE(w$P;<353-ITmt=uW%#g|fTxRr zTTMU_w>^m&D55EvwwDR)&E8mi84$~rxkC-zy?T&j%5Os6guTJN!uWuDh4GQmgm{-M zdAk@`HmVeL-~g5@qd9M|7S50KicErLrAn|--$2Mbh6-}BUZ&);NN#wC(LeSB;?K`p zXTokTKCNJju@}bnNKJ(whyH9~3LIv;PhiehaBLupm5XuV_DRKzqc?vPN zP|88%7s~b6TR+@@j{$#V6H1y1M*#|VxL>PPGITAA9ED1b6opD^EqSa?dgq33NLFt4 znq(|daw9?{OO&jUB}xc^Ncj;+sb(uPyqZfDD4B*hHXNl+RwgN^H5%uwUgN}qBrB}v zQ;er%Y3Mz1oD_*QOf{18EZ4Tl`Aw@vVudBj-0npgts2R586#w`MsitsXQfr%Q5h#P z=_M7GwBQc9(xt&l{;Ob}V&q`#`g5k2ohipVbUQTmSLYc!p4fg>bnKD(CC`|tly7wm zaufU{eS|}_Kx6y!QH*WP#4KDW2zSiwtc)`~gZB-aW^tAJUBF5T;O~O5Td%L`Gg(k; zH0FDY88cZ0!(O&5LxAk>+GQ8@FtTa^M?H)$<{2HeH zSZI6CTxj>>td-TxGW zOD6fkNy{i-$ln=%%0*EthOv1VGoPr0vGJPKYc@*`7)8^ZFJN|$J7887S?_Oo4&+hEVuF2MRXhWJEzXPRN|Y)jQLT zQ>WaiwC#6|{5^CSJ^~*W)AU&}VykJ|w>MXc3EQ_w5RV+Q6m(4LzK_Ec9VLLXYr zCv=|cK*wgZjOge_3mLdO)XmQ%GAyH8$%b`Rbrp0QHsHfzx>kyDCry`Lfa&Cw!A!XW z!q^Bp>?{lX$tv?QK~*`&uAdRP?-bpd<;kJ{U!!my)j7s{e9)8U81F_PwPs>_iLt^; zXPkA$wrxCEcbU9CGyD*OC5|!5w~)v*7r=T%x{rI|CQdPa1b|%TGPdCRpc_Ppf06K>R=>dX^7-dN_o*JLeK~rdf-T14JK9UP_$Mhu{4Kt@Q?mHc zOmbmiqc2Hmo#jBpX6?<0khPB`k_${?ZwZx)9H`hVy%7~sL}QF;yU!{r;zQD4wettV zh{DD2VX^anP|CLY32Ayn>|U9oZV?ILg8W4^MRWEn>zp~*U=Ax@$i!m3*_DD;GFNgkYiL5x#cp|Ij zx9t_^CYKD_A$UU$xuBil8zSR-6e&yw%OU80qY#V6j^ki>1YHgyzo35+d+Uc^!pDF= zvI#oPgd=g$vFog5u@092nInbuc#*;ix3$!3JF1;hW%o?8J=;?E?WO;KCi~l7lZ^?j z4ey}X1tL-$Mu|YyAnxK&d3i>M*`7ppkWJW8qpw2FvfVbd)+VrO{2(VxcKa&Fs!f-AMvQB z?-fJ0h9VvxX_#UTA0NmN^UOUDbW!Fd32qT;MVz4gNr z@G;;ISHMN+)!aFuIZg#6*geITO+squrefs^npBqT))88=$r^ayof2IG6`qZA;%U*& zDowKM(BiEHEBKpu;cBhSM|Up3%H=Bin;7~6!ILsf6b%L1&D$~stGIk9^X6zT-Mp<= zi1?c~bEjn9jw+SnB$uQ#eMOYL(SelB+?kOgbN9rwS%>@w<9CEs)q$4H{29^G%^xy$ z_m+aiG%h~Y&Ap2NgYY@`n$`6z- zhYL-XCUbuN0^t%lKk_XWFG4si>E~WA>_pPfJpkk~%`rN^!wn*nesJur^}R^?(OiZ< z5d(4HC6j*Syi2Ab*)#+I*$%Fh1v7*z>E}U2uOEH~9|Qi_k9~}0wQwH;np8f<Ee74m#)fmQM@vYst0I3Pye+zzg3y3%jQnWoq&46ipY|Nk#}SPj(4D8b0ExUkOKkbgkuv7 zS~U8S5P6yd5u3|kM1<7R7-QG&^~JgjL}9D1@M~bW@X0VZi?8q>f+_93!Y1?;8nkaT zF)=$+gHrW;|oJ_3X~WLrkgGFE}+gt2SDR4ymBLoZHh1cD_T4EYw5iUCYhb5$?ggnv;1Acq}irJ^;$>On5pM1sryLpI}qTMLurDeG0Z1x5Ck0x?AyOg@}KY!rUpj z6?C>$_+|8h6#lmy2-qA7GXmsLXh&NG2HG1!;YSV>Y_5b61=2ucAu{K1#i|qXAQ|84 zM|=SK4IhLLiy!gVV&F+XLdyc&x5rJzyzN^gh*cgH6f?`b!#(+(B6n0(#KADPQBIBW z8@xm9N1xBk)G_!NgzT{&n<+f{TCkbYPr&XN;W9XS5cYJO4^LxN@Ilz6h=OG)X;Zn2 z6>Kqv%h6uC;krU0;%~Ujos!{-pLi8YDE^w%!d3?|Lr}DvIPfa4NxUa?wmZnl(L??mFly$n5$VQT=(M+g!F`x59Z; z!SO%wK~FASy9i`mx*E^Jz6HS&OIP_8m#)$Cuy=dmCYG*m10cr|F}`$tlN&@XU2)|8 zOV_<(AP&6b(pAp7WEqmPw56-$Z8L;x>G};suOI#sJ_h`;ANvG&EVf{uKtCN@8KF-A zCAj6KKH(2>HatCo0uRalr(jvhQBmL2zS;gW1zU_a;Ak)18#w3!prOU3u~|HGr{oPp z&%+9{5PeBT;3x+oHc!Be2rXx0$6*B~vA2Xu;6TNjCZwIl7}Iv2U2KG06AG&j@Ca~S zcr=X8;sg9daAwj6(3ZAE9B>u0P()KSbxa+6$ACXFniTJ|ve$Z1rKo&pNGXOr$3|t(_DZEBFMD7q&@-*(M5WyxCLLNHnJrk7 zQcuphla%GLSmbLhT`Sy)#OK?q@+ZWvyR9>0w;>$`TZ|1cwnwTfY(jswle0L`_{mvq z_v1E!u2r!Z&c_Pc8NMMhzD|+Cw5D~4{ap&Ns0ELMVRT6jBEQ(b8++@A@4?4_KeCBE z&4lArWHzzV4$u~I$TG({+QY>;+D@}HS?-kO273H8P4oR;(~M_kKaLQ|GqY!1QR#>q z00Qh9(p2kpNb7{lAKY z<(#YIT;IS8b?q$bKQo$VKZ|-5KbkzmEel3hx7c zcd=B4+@vl7;VQ+mMrq zsTB2EyMyP~S)5C|zk(HFg9`ch8@P`LF8_!f&Q_dIV3RcZBSta$Lq+~6j#a6h=u5)j zq+&22qhg4g$TP*rzOIOlI8%(WpYf+$O=;&Iugb0Yf}1vO+PZGzhAlS-!Y>p~Ly=8# z+5-n)0;JDIjl zh?v}SdkUtxQwlOsYJ`w^dO_Oq&m0KYf=gxu6cxK#W`w{%dqXJP?Lfg6R5GGKs(Xwv z=WtiUkTAKcf_Gpj;p^Zd9!8Q}25RS4F-h}qh=NDza3!pb0Vj|xLq8o58J z$n9Rk%BfK;c!#bYz~1`dH}Nsx57!!2D9hZ35eqjzm={rq`O&i>avcA+8_8(FL3&uhD&8H+AUWDgH%JRE0y?IyUhD?R+$kBPc(Q{~Gx66X z_(waCu^A^bGGv?*xefxG#Ct;LR0ldXLuEuqH&n>L!)-lELzO-A;lH5I@K_j?#a#VV zaAwk6jWqM&Vk@m3I{zX8Ji4U)jXvnf%!g|bNEs&wy8>!BfLez9Cm@wT4Fe@eB+WMy|Rdj`-iQuqqcO(7#n}1?F|8R6 z?|}h@55R}T*54xrowW5@hC_8FZ2|?mYMm<72bip}9inn;50;bUNI`HKUPH86)stl5 z+hE;PfCmI&r+a5@63z~m>vaLqhUVZO+baP?xhc^5*mX$L|6A+yJKT?7D>6paLL3aY zO(n^dU*Nsue8MxB89EXlgOEK&ZH98(;p1R&#n`iDm1a|xV+yty^W$hQ-TbUli1?cy zbEjl}Ak?W*7gRmHAS!NhAh6G=sM`!=wqgRAf-qKVu>^VxH^Ya;TAVJ(XSEi~w}6S5 zsDe`O?5b4oo+uD>NHCZbXTilDWqV1mx-wP9-AX7j!+xYT`i5zOCc7oDHG6Dv)f`*u zG}Tbu8eNhlzeeASz4gOa;$y%cqt@upDtdPaVu)*s*ut8kWkrsvYYwZ^obAlacJM;M zN-ul^lG{_8KczIq%85`rP;Y|$V;mbzE-4Ny!GQRR0{i_z$g z_R=-_#}y*}8r|F}Y4pROpa_v!5;69c==o&_DmLA2MunCWhZ`mtOicVWA@gkqGPcEp z5gFYuAm0vmFS~S{boyGY!#&Vt_!aoDScf-@F(<8q9ybg(&R}X8m;{s;yhV^B!O~Y) zu35X&sx@{%;jt-RK_r%wwj{WG50ooorekpcHSFaQVg|rEu)KgK+nq^hRkF-u*(I^S zBZ3@e`F5C}|4_6X)k&^-%WV#23_TgooP$92cxK6Pv*FPQmWXG{w=AAn(r-3=k{50w zo_Q<)IpT)wB$pO$Jjx9se|9Ix_)iheY2pP|mvo2YNggz~vDP_(K;fiNofpqSN zSK?#99~s>a@3i}Cu#eRBON`yBMJ4M%X!6>E{T!KWzo7_UCpE?1olhh4=VNQha2g5C z{SEmO(n(G0EZBXHTNP|EK8LYA;`ne1`m?3j<3Qsn_L^*01-eOVq(!z2iS&YYhHr?B zf1*fX@_ORT99vm*6=GJMz_u&oAe7GajupKVd+Uey;A6la*+iUX!jXn;OC-}0>xanY z&XG=koJgmiZPXwbIbG}Qfm1i&cSx5Y^?RD+zxA4AOt61HLL?LHFJ4uyPt4XKmq@1B z6IKDkimi@!wQBGS@Mpk(DMJXgK3Qq074cAQ(3n2wH6~!(?&VhXX-vVV(Mg)~98V-q z0lE0!@*0Ddi~mn-da~!@7jQFZ z`d>vy9LcZGdB@KDi$TUS`!QOse-szet_IIe=9=S#xqMEMYmU5~@uyr2wOsRO4=>{O zD|SZL0p}5z>8HW8;RN37muwg9zO2+o)@j-EKoBxBf z)=gHnu>0EAE7(vnC-|`{9_5{_?r1MPzSmNSm^@v3a-g|Witp)n=?HtFzamP$(1C<4 zvS&s@QL-DkN=IN3c}Hmcu>%cTOwWi08G*47d9{1(Fl)-Ve2^emBYQVP$Ki|NBOck4 zj0gH^s~EX;E%o@g&_+z*;{zGuop%Zf%H@H5>4z&ujr{LWz7{0*47Q!-#s-CogE z1{Nakh?b8!(6E^>Ga6*Vpt!w4gHJC+)T1v6kwaDhJEg8)>;~P4h;GD?SBJYJE-oM% zfvr~Td(d)J(-G0(f+J@E7@@C-;rcM<8X>SQIFh2M;t%-i~u6f+hBi>FJLKw0*UG%BxkgUEd&9Jy;@F7n{D4wi|5IPjADMsn7rrY4y*L>E|K zS;~SL!nJSoJVdV_J|7khcGr0|A?3U`Bu(1MTd! zz(9LLD16z0f^A)EM1j=LScuHo-BPf4xsPSP9=Z)b0Us8B;5B00Nq<1wA>6koqQ$iB zTO^26ejq4j7I}wjGEn4>YKk}*u43iXD4)T575iK4tsnjl9|Qi_e@zsg&o0(P=?Ar^ zMrWcT2UEjEm-rj1f=_H8gD6;*KQ?uHq=GHRXgS(TH(HAoBK}6p+$kBY_|a^kf#R=8 zCp^P}%n%gKQ?>pI2Rb%mW~7a7%#eY*Hxz2jA`)U<;vNT`hZn<##iSiBMxQik`V#l# zmBCE81NXgRaz3VE!k;YFk|Cp(vaX*I4{Q_N=CTVnE1XA_>e%r?PcB(+Lm=yt)p&IK zB?y*SvdXtC)$uGn)p4&EZeq#$G5~Tc4OyzAwxawaH;7!a;>i7%tPL>`2VQc?Dra4? z42fCVl2!7y8N#(>{Sczp4?m2L0e|ej{s7jjFV-K>OV;PO&6VO~Jmn`XuB{d44!?v` z;kj%ruwwl`34WFA6m?4N%h#_d*kU{ZM|z|RyS{+@ujQ}P6&#p#6~5PeA&;C~#5 z*t`HUBD9Q+)utDi#NHAr2VDw$WpVLr9)J-QQcYuwX@|ShH7+V8O(v}N|C>PK@VD?` zvHyQBrXgwnwI%IZbpoSRfviNlvlZNdDhqZ4GCcDTJp-PR$TKOEA#l0lQB-p@gC|>O zFuq=lZI+%OfE{*-ML{LGl%4lpW}c6|^}`GBG2oAkX2m;$ez_M_ib^wr4EkF}wLX-o z^h4c|oRFu~oO*Zik4%_H6{DTc4sSxz^DH0v6XMpJt@C0xBsVD7Vho9~JfL{+cHFZm&tkocgyR zL^7xTLRPe%_a5-xsp^QRM$&|@A(MUw7`R3-Q)$(jRAD4HJdNdjUSq*rdaol8G0O7v zRHQ}$DfFN7LS0Lt|1_J8>?!m`)}9wiq{t>|GQXLJBA8VF4Nr;`R(@WPqp3Loc(`~V)W6<^JbpaDMY1$EkDE-OU7$Pe2hyk*% zE7l{97@+KD{3%yc+7Sb<+Vc_3S4=s3N0XfPz`>^i>2n_=_!M%EuBZKu5iIkXcJ%L& z%tag{@G1ooC8fMkqF!rMf+joJe{oQPvjaIxfkaw|c36N2D-3$2h(=mTi$ztNd)lH9 z$Tdj%NGM8hu=St-J0_r730B~rsYO6wD0~5NAdHG+{d()9+ZPX86l^G24;*t9H}O6s z;Ak&B3e`}Em|S;zPNBI|ib6p?r6RE;VdNdr@_7z4Y%wS^8j6;fP8pkCo@1%KBt-T) z5V1v|jEImb9}AIJyX*7qK}F<3qpLOUbOUr4-VPt}xRYc$&_tWWh^-65)+UTH;px^! zaOK7upiCeX09g`T$JP$P^eo(N1BC$Fm6`?u-Y%#k*D>}rD#o)k(!NEJ)((bCTR9D?1@Cy)N3gek z_)&Ze_`|id6{<3K^1oL#`v?c8X!ap4Q;9SW33gtEf z8K=ahDFU0sdqU@>4s>kGA|pDwp+W}ETVOpRFVS0utmf)k=rh~{9~N_UjTm&&T#Ym% z@6DoHvoJYy{u>p}qsqv8pAUL6Bk$b^q}E1kA0&2&%$Sk)834QM_ygt~fd3(vh8s1o z@H5ZkZTc?9X=~ zU^DP$1eAgIjvgD^Bh@h$BC{23V^!RI>JPV9dsBRYSFdVH8o4McG>KC}IP9>xWHz4ESTz8ol@^V*WcZBL<_Sr&fEN zVvaPEW_Psg(eQ;xZ%=hzU`F*T1&^5-)UMNCreKTF>5lf&b^6;BBK|tv+$rhwX!5jB z4$+q+?)NzmvFUa*B1*S+W4Y4;lh|8A<>L-iYzsFdD!N%frp;TUCn6!46REqC)nl}#R`jPiYDxv0(-M0##S!uq>#2+_=Xy~+f+z0 z7kUGF6~Z%kh##P zKlF6zqb`TZOiPzO8o$ix`9DFy7Gouh?U8Z{4}tz{>C!mRc)GMENrwq^txCj@6fJ0H z_=ZIM>53F4JLM4Za}{E45toC=FXC5YZ~gEZd<^&_n~2j)I8tY0>CzDf*RrIC$iK~z z9DU?OvjLcN;P$uD_F4mON|gC4hHq$MZ}OU0Op$&zLL^h9FW%H_ci_%NxR9|8Y0#U? zleKbVq7qD(!T#)KCC3GZqUiY2(zzm)TIEd))dr2J<~1f*x^yAircv3my;6bmgdA@+ z$8tC`Ftn2Vhk?#K3l9mCC0qK6tyQ>!Os2BIpRm0*H47KiG~rlutK4YgDXGQ|A|aFq zgL}(Z?JsWB+mNMlYemj)VeJtGpXWtEEn|B(V-A(E9m&aE*Pd2vNEqOvCBarm!l@yQ9C?8)(%AQoV(h0Vd0^KNvB6g1 zI0HyZwNlng?`QZW;riNQa3#%W2)WAKUC!Rsh210IHl$jkhSw^M*K3fqa%b<%7x!)l zn|zQ6<1FkR9sA8VTsAPR{jj@uWot)!`64!*C9Wfu2P=u^h1y^_TZ`Cyk3rY-pmac_ znS)p}k{`ssh&~_op-=d?`0JCxUHIT4{XX~;%<01JA{vi23NhTvo#n< zcI){1m0LHjd$yc`(RIKl4b0`g!!UE_cx%%qh(pVe1$;TEjzOt^6Tkc~k~r1*jeBjl z1i@a0&GCjMh)>`tIdRf7Mzg$2)1Y*wXQ%U)*iH1K8e~DN@@)0&>P|rdkaX940AcUcre5B41OSA@i3)sV@%x94;j zksy5$9s_OL7BvC;{-bABKUSTOQ_zj-pW_5-)d2gY-AVy+Z3$gt%UIF=n3JM zuLy}dR73v4Z$v^9{yMa66aHQ7`&8j?2-F<`DkZsUf+AUk*RN z@V^gx>xb{h$ACXZDg1bHYTUY%j)qPWCRweDW2V2>n5fTAR#1d`-Oag@9uj?(^hTK$ z7#aGN-GqMlS)7c>wwchk7LVh^l8!Cj7o#^B3y5~%&f>_}xCV;7C4T;@U`ZL&i87{L z3;msfHEJR6ZGA_3=^JSeDMb9Wn7LEhNCV2n$qm{x_Lk`RUk+4kTWMxgluK6(JxM{2 zF>WkOqI4=*QyKpeNEH4ze8l&}G&kvsf{a$>zinkORWI+rV_t&gS!F?CYPHh(wNATI zpVBXLW%*(czcX^}$c4Xf%?^2RDzkxX$d+Udb z@iE|!{oBCQ8Y3_;(CA}iV4$aP1y05g2By}C7#Ku8y5okbPZ=2THCKrGTjJ*{1WV>I zFsl@7F$TubUb=y~MIqvEV9cGG4NQcdN}JQdwp*d7)| zR9GR)UhFP=xVzv2uCqPUZ)W<@(>?UDyQ2^!-bu&&)j<g7G=~A+@W>+QEQNbG9}&pR<%cHB3qLr_{<& zJg&_UBFe3BKKc-%-&3W4my`pE+C=u0)FhC1EN8-ZDfEKK^%H{P%;aj{p!}I?Ta5m2 z^p~wa?p1*J>kspwq(8v9q$3z~vG#`Wc)tS#o8B;kkY8^Y`_uIXl3dP2y)?H->{xZi zr(neB+wfu086OcSwCapMqfLnznC&%S0}@VP)HJ9yrm7Pd&xYWCJpMmXZiNu&pDwq9 zxke{ARIc+2+G{n|h45-a7C@_7!Qk-(WPFq%WX>JmMsIg;)m#A4%QB=8us&Fbl7pbO zJFLLCjKC=8_#=A~MD&X{g6PV-nOY*3Oor9zGqI2=l=Z|6Qy1hg2*1-VjN!+P=vis?F(Fte0m%yNx2kJ+<2@CALe#4uZA#nGOORQ{p=(5Xbl@k>oQ3RprrV zPgQM;(PxhSvh~?61&F^sGY?AoY;mc?Rz_qd%6}3D_d5o+X)^QRN|SY$=<5k<^c~0yjmbb{p0nH? z8T>YXNhp1h7{bgG$-PCw=XJY+Z&($?zv}~@tRTJv8>!GQ%MCo{sH0SN%LxY#tmGMP zE7NyTz7yMmNgS^pmT!S9m&&%9V0n)hl%jT8Ffs2fmomal?1ZDB)S zYA;$I0<0x2R7(81fcfZqhHq~whhgAE? z#>ECT^}YO=>7sI2P-fNq>*5%@g9S;~}l+ zHe3Mif{g!=*64QY8rh}&t*UJ?(%#q~36|(EjAu){!s#YU$u#@xc>-K3>l+Hj1O^S? z5E|d2P+{6QIt0KQ6<~2)n{0-`2RVuS0^m<^v|jWPeDwKaFaba-(Y2QrIs6t{HJQDi zz)_-NmKO`k?!gx6g0jo-&J7w#X7plmZ&;p~hLd~i zE%@7Z?Z!g7pc#F|YeukDa;$k`tx~uYwI_&{LCVP-B{2W$1-(|v_0McsR4Lb{qiO5P z(~w4@Sb0~GH)RMpQe>C3o)6{02wuMNpeIHOyDUSXqp{TSlEccj1bBd;k0cCQ?OGY$Ex+o#%R=nKnMgZpp>k_e#5IA`9TFN zg&(|ujKGKla|Z|VY*~Ms$EJD&Eguw zJW66EEqU2zmx{QRM;NWdhm9AeFI19 zMLm4<`NOsI71A=dCi04KBo#%5e8;;vaz;3kBgC%f@JbO(_LKpuys{vA0Fmyghzhu& z;~_y{aw{GuGrJc0iE67zc0pRm(OkqJ3bzXstE7tC`uLSS9Kil z3AQIWFiRE1Z|kTb&OH@U!MAlBLJ%x+-6mFBs%&id zZ<4P`0=(V<%mOglP2I{Nph>+aaQ@H%j!kJ9aic3OB;f9zd{Oo!%XnPaF$cp&zYiZ4 z)io>TomO3XYTdc(g4uE#4!;sE(;EEAoTiLXRn*<}GeY;L#IR;#&msRmu3#Qky4_cN zz?12AU&2Oe&%|OUdb-^bNVmJdkZJdAY?jKjlW!q8WDzveT(;l!f=wjZ{VOzbsmsKM z?|yd^nPi7Ece!iDJssMP^7CRM4!C5Jom_QEGQ?m8pEJwAkhE=X;YzYQYYVJPFM13< z`us6$y?^~Mbg8(ixwB_%7A982Rq# zFI&FfqX6-j@8&^CzQ^zB5KwB2VF zWJqb;V0A#g9|n!S3?CLX@dskoRy9$?r5l0}is*{S=OF>TnHe2w<3Tlbx7v_s%C9y~ z-pbU*Dfs9|>@lF)pnME10b8I`dqY?`1INfTL6cZ1DklR{GQ28X2b2Bs3Xh_AC-W8$ zcgjT8EgqL5x_JV&{0Xha)2(Y^R~MJ4w#BFmV}B&2qKjZWTk17VG?{v>?aD6};95nA zA;DVU&hQPPai2nkNns^PI^mDFRsrT_bUBIqjNZV}deJOC`us5%qti+_(r^>0*GWdo zn|f{NXXXC+=~esZ@pR+mU_76HHhOEOkC%m@BAa&lWci|dGT*+y6;pM{&VaiTWEy1p z3tHUUycQP|uW!K?>BQ?jc$0^^?jn7a2PAEB_yT~B-{rus_fS(8-!E6+D-Y#R`X(Iw zwigaCRr_+Q%O{?#m|hj0@rQUEBvX4^?Bb6@RXEf`)Vavyc1V%MbXj#-gmw!8=E@qb zOewTaLgbsg5UFL2zk$(|IWKrSUf{ut)YQo%@ero(2)mRg+XQWpPgb!KMZm~!z})jBjAhZGAfpa+`UUB%3egss5`Ec1>9 zd%XLqWC20+0qs?u8$qHE>m4`>A->`>WqB9K>#-5%@-M=lz~!ISh7?Y)hwc84fAN_D zyZ=Lj|9%F)Rd>t#KeSeS*7kK4_kU=u{%(M=#Qh&yD^4g{D!KhCYP)bwW|F6>{~)q6 zwEj7xfr?$SZ2?K;Y1GgrMkSF8yHEX_c>GZ?w%-N@7hs`D<*`M^{ash~hh#y6a5Cz=Lp#UJS-1K{*E)j!|TXm4nNF0(F>eOGg- zY8y#10h^NCHgM5L3_PHA{S^Umwd%;UC$MMC8G#^K5nT*@+qOb$+4u3||K)6ed7dIb zvu=g{XN%;K?XZwx61?dnX}YKOC{gG19*C^wwoU$B$Xz!Zbx!w%EgFi=?^2F|~!HsvjH z!CW=0Rp7EWGGo|R>=ZawxrjhQb$Au~f)Rt+uvu+X@Dv^VhTDHi_5ZJ!E0N{_D`}dx zs~Yj_SHxpgc`Q&Z2@STZya(@a#vvT77ahh&pFdpNRUvC~=S%xk?j*%uhLptvVe(b( zBnMz;reJshYm9tS)RG-#KpH>8Wj=ZtB0d(*aEtQ7kAr!&AUV0GjuW0;p8t+&Yn12S z;Z{d~*+GqWDM0-7fq760YNU>R5yngEJ;{I%JHWApHq79Vj!d8WBH&4XK>*$30LT{L zFakvSa)gm_&P25&<0Lr58sfME<`jJdK9V60O`dkeysgSOdF+e8XYw^+vuDMoL&Sew zffVPoWHXFdOYrlH_@Cftz34%F^!Z~z5l>dT7HANt(cTbNe(Hr43_TQNx%<>uCJD|g zsbkx&?sd6hcgc}lXTi8dfBc9STnha{@w2aiCFXW}{D-tc=ipB=gF|*vf0k-njHoyE zM^Ys^9mca+;W*u7Ktf~uGX=O-#y5l=1O^S?5E`GUP+?LwNj}Daga+7U3NSbO%Sosn zye+)FI9e~d79V~77>xaCB^=J?ct9da^jbV(K|bpoC&8S6S;i2IfI}VVR`K{tTGEQw zl42O5j4je(h_lw0YZG_?4erJe0=CNn2-J4S@(Y5e=>-pl1fJ#*5{P4lI|^|=z%1ky zylo5L&9P){I0j=9PrazYUDmCjF;j)K?h0Os4*x0#&G6<9>;>__Ftv$=ts(o4HHRCM zRdXIJn8EYE`SELbXEywUACJ=+Paev4#NnV-x!reFq8DHb9l??FL>h-f_*GsoXfcl8 z!G?79Ng9s$!8qsg#lh>X#WEeLwx?mK*{$x1nq5C5A3Lop6IVpKh%?)GCAgD$eJ;yR?;CnyJ9ytyN%TH4;495E zDq(Ft`WHla%u66>*6Q$`!82o74{+lvc9eGb9)rMhixK~%CH|pxiS2gc1FEeOexO#= z_SM@Z;OH;gC9rHepv_|J+P1vrLCGbsM4(opPyL&4c&1}`n+w1^yux93X>3WsNlq^a zfb$&yc+a0q!VyN3-OUAX44dGRbYeCda-jh|X&5cXglp)mLrZvvWtl z8HAnr&M!7$`3>MommYI<&=-Id zs)`zk`U%#uzuCEZY2CC4elMjf`6pY zO4WEE+y= z4DUU6U8^89b~i2DbYmBXS@p?(z(~>QFc*tH`4>TNX?>y}%klV~GVur%366|=6Q)Xp zw_NQ`2Kgyr`WaSCJN68hipG$vy84(@&h5piS0mA-+Pm%&aap7^cb076mq%(|jqN_* z$>TY;Vk5aV*~Sv)^V*+!AlREZe58!2q--#vPf<3e%-h&45xEI9Y(2g-^ ztIGoPKyqat@(G%ZcjER34_mRrU3HwOh%lU3Wl#*uRW};oQzf-kUe6%1hr=!1Y z&HiZxi2pv)JSb^)aSWGQG@)aYuSo%X-T{nF)0=@IO)pO2imx@jSW zQM5}>J4&Dk$B5RQ@?FGO3ml zTe2Cocy4Vb7dpQ-dnu0Ai(ZD0K7S0T%_wz5%Lx{uQhP&K>3U(MsPqx2=P1@4DbFS; zAfk|YEQveKL!LR3&|J}b5Xn5VL;i$T;C(N7y2r?R)9^2D>w^#X@PyDSiI8!Nx8EnPelyJP+&O%=d?< ztJJ86k_e68(MmqaYbB8;pMWjWH2Gx8K%Z!au$$M2^WY_;7Y7>zi~)}W1Q#px=V?ka zxWsD)n6tj#mxPSy<%@&Z0Qyw<>-#Ej_2;!MeqKpyx?BlM?Pj^&!qoM0eL{LB@qn5Z zT-gfM(D<7m{u?^cWO*5Kx!PDfJ=JVW-dsKiJ4=;OtsZQxx#Jb<&+RGRXqsVXE2?N?sdSh zY&_)WwFHyR#>{d9II8rVrNZH%F74?C;4=Y~B%WX4J3(MW!#8o+K20#A z`C=jtxMb3mTy^PEAU?}Vx{|bQZsAJ0nnCb-Q5_$B{%|=Zg?7qawlhSV0PpNA*d~B3 zRUo}SM4P~{_n(h`9hb$^G*|;yqhd_m&|$Eay&Q|VS4`PjIB6cZScG>MlSF&Dpk_&I z@qL2bPJ}kDxZwM^dZHf9i;n)LL zAh_;=GM>-@K7n?1wpN7;7{PHkTPvdj6e9nPTDi%5k>FAs4X!KKIvCIAuaeGC=1zdp z*o%WJ#0XaeYoz=DBIRqdf>pC z(KSy#aDcP7a(YMqh3!(tj(iKeb}Y8j#OlwzpcB^4Poa^+sz_Qp54xL3YX|4sl2hxzK~qqVp?o<`5*2zZ9o!$SZj(+4-uVcPyVmSce%K>Qyh=QbmB znZ7i;1+-qZRl;vU7LcRAYzyeQ3J`w_$UG=nK#wt6Kzwb5QEB@LVfrQqkTzS$3?$h? zXB%xHjUGTqTYp1f&N;xeSw%)LNeGTGUg%B^-74a%V|BA^foVoF@L@5HeodevZ5nA2 z;q4F+UKdcrlpSb=S9wgZjQ8do9^e5X)Os-VeC&gQIK4_`-Z@aoM5d+ z$!B5g=)3S?F-krrkeN10wAjzSMND~4*2+^n7Y(Z~FaZqp@vL^I9VUIjwy0C9aJP<8 z&9f{mP(wTk1deEJvALkHCt=l$2G_DYGVue^bE96H<9bXMfp9>|^?CdAIRG3v zBNI$2L9;xEhRuY?dWDR-5H56Y1Z=x%>OK&Jq)Gz$N`#a^0m`B)OU8-;&bG+`{GG8b|PY(F8vF{4s3P zZNG4{t-2S$#G<#shsCNpBqndQ>bg(f9l|95 zkdhzFmf@g27E|kti&9x|y&P&*;ferptt>i&Thao`)s)ueFRW|huonJY&23oGuy6Q) zC#{8lz((2D0v^JIVFk+}O#hBOr0fRy7HEA%ya&yK_@NiX!h-ldG;(O_qy_O^cN1wr zAU^yph7KG#sa|@RR5$uH}>P3&kN1s0iv>?1|ke`TSWJXew zJW^CvGSncC4b71w>yZoI4rkUTyAy?F;W4tE=J$yuT%D*u6O$RNG=q z24jE31<{o-o~x>c;lmm`5yUW|%1-B1N6PNvf`61)3L`hghc1dgbxjY!bTD*HaF|t_}<89&-75-FNeTS#~wAfMi zqfrZ-re*MpwmS7vXSM_`-DYdFeYnjE`6N0D>yL2pwLG}M0==)qaj{jS((YDSA_Xx9 z9s#daS=AvsP*$HZYz@Kt4rJVt>C9mMq4ugmnL>Aa1$2`#Q8P_hL0P>G<)pRNC zR{;4$7~5~Ffk>vh==`^3`J6BtQ%V^*f7A1KEIJBUAO6dE)NE{&67V~^Ch_7ddlhWl z5{h+_0V>GUIab0I&PP|`0>pfvf{HCQj%SyqF?g+d3D)ADT8@^spXnZhGvWIg{FC^7 zt99w^dznqDZ6pa0tTpAZ^NyuD`pb5ImK7kTorJx#(L5-*KabZ?EKwMHN4Tszz_2+# z&0r{8c27txF9yhCFA0!a9DvwdpGH7PoR2VC&3P1Oj4gDi?K00+t2f#hkmmK6yeW>LwC#}?n#kb}D>)>0%(&6kQ2Q!{TK7gQ9Vacj*7=NTtH^XgTF22}w$|w@K>W3ic~H_iOCiaX zFOksN^n&>Mdkz3>`o;_Z>6>K`Y-0fMbp>Uky&({O>Hxu}X^bG~ng)rpyQL6TV$^Pp zs{JJl7CitT7B%xpFX5j4;g^HR?5NnKkGLH*GM|68Cpn^|#*(As;k21PSwJk;&Ir__1M*9^Y{>sQaC@G`l zF)l(SC0`TQM-E_YipdNNDJF512A$#}ph>+aa1J}bu_-AdIJ%NT0`BfCKuN{;!m6sS zh9RRGd{|V~m153mRi&l%c3o$+2;91UMyP(J7}m^7j;+Qk6wJd)?0CBmcrvl$t=LHI ziC73^kRx3_gw0af9P%v~REZ;9KI#RVNa6S}G;*oOgjW4ycN3Yyfirh`UB!_u+K%x} zVj>Q>WD18|bxAVBTn5)M)Af?J%`IFh9RG^o^`h_Kqt741*7MgEy?tvp+U44O_v!+~ z4)02NISb!uR;mzmYR^XxA-+8o{VAmq0}pqbq95ca-LVOm+KU-*@22`U$)sbS4I^jT zp!Ut?QL1e*`rXlAwthcb0phRU&4ZGDhrOkSU64%lg0MK^0Klfx%>XE!?(HZx_D6DK zgb`aIJ4b;Rt2$l`n29cc4~shfxsr*~cgKV0S{}`1d!X2NVj4V&?L#3uCKhTb|D=K>X#o zc~Fw)@#K7A!^d9|ufN3sh)u4W0a0>2nVT;l$;{Y)p92)zKFtVmtdY7iDg{$}#2%rj@9_jl0Mno3lqBv9$T@mSgPC##FM2DKV zM@>D>zsY8pz$wv`UrqFJv|jX0eDwKaKsDi=w|&1CRxoe7h-3;#P}p1SE<+}3Z!chz zk(r_GPIHjy*9pTvI&L2FS-&Ref}7X!D%HN z8M2m0u$J_kKg%{p_Ve+xVfm&+?sM!NE#(fcrNqqVZP+56`FsgxKI6D~@}BcGrdd44 zYZgF|-Ak=PF`o4t!zRzBLnIWC^IZ3WTg!RAi7mqaz?|pX@?ZpWo^SEQNMSk3LSPow zA5r!H$%6~bdH(G93IFdd1_II~2FJC`c}DVexzt6@GxGj` zKjmUd%X!|MPwZu8JQvm<$2!pNU&HKjU-%N?is=&CFW>nev3aI>n6zuqL`MV{k?*|2 zx-M}OLsLf?vGnQr?p3+0bFFJV#rfHVLZ>BoMh_zXVlE>=vO`aBKKgpwTHC$8$jaGA(umJ&N7 z!TBi;K)mrmvU`NlDwGV(RK)d|`IthZerxn#5lkgo2_H!}k)$|~K0g(7Xx-x-i5z3G zOh;m9qRMNm#E_KcxJ%VgyG1k}Bw8VtLG|Drt(d^kdQk-*eg1ImQiYt%o!-1NANgiz z987LrzhKtTQ=5IfR+`$%fKO)4Mr}l~r@|>9vH3PZPIBWMcYWBk&GS`TMW74PHje(X zwasf3ASSnuy`088C}|tYV-~W5UJys$=>Wi{XUqVQp3%~n1q9j~0^tJ=5NsO82!gI* zkT|=W3t%I6TJ!BNRP=WEu&9^AVy;&8a%3}##ZnzvAc#8tQee!?<_?wfS%vPnbVxSC z$cJ2-{3_>LI9e~d4aOY$}G`{NwI*c6f(7*a^7#AN|Z z>OFyTkpmo?ax#LWD<>r2oPlzUS>l(tT6aLdfB~Z?z?3X1>On!4X%#ipbmptAh)xRZ z#MWY?Xgs`AZJ*-$`8J)-e6ts9BAvMoja)mi1ePOr z6PeD8Gj};uMLM&#L%dE*!~vH~XO^ojg)gy|!7I#?;3RFETe#Ah--O`xqBrBC&mY6q z?|TZ}Qi}ZD?xqFX!--Vpf_Ii86*PK3V%k%|7n8_*m!L#RC~@=AuGc@T+7_eN9sOnN z^)D(w{5O~8K}oMu-m=i4^n#RU-vNM4mzx1ly4>3#Z0wID#t0*}0(Odnq%q$Oc!|CR z9~L$IL4mup8rJgF7LtQ3)@>nO&`KYDBXDY_3F*+@|E;DPXR~B8+@(phD7EVC7<@E> z+KbM@N1s22Eyed0E5#=oaEw^B64t>(xNX6rTVz8oybtJke~lTKt|o?Xrx$!;XZ&Vpl@rn`XWC1{4s2ss^DO2A)ar&EUaLgPcI6)57F#xJ{5M2%fAa+l%x_j z+U>^DcU0SAj3q~Z*~Zeb&jB1}ZdmL-Z}XsJEXC`;$n@0KkR<#m4nS;1k{J+XB>5JF zo#z0>=Ib_sLSknmLZU5Tx1!|f|MTGNo z>uNbngQtqd4t>I$rV>p`XM1nCcj9QhXcs>E{4t<<@Gc44>xGq~@=amOyt~LfzAOk^ z`0hTl9L${*Dr>!vdbOQ()Ik)(J21H9PlzfHS@CaI4lUKT80BE>k7QC*hw*IXU^vla zIhbbj%?fa>;=@q%C2(i>hS2z0g$mPN-of1S3b43pPBue-nw&&_=6)}Z){EYUk3N44 z#@w_Lj?$sbTy3owEN}5qj#97_XTks0E>-I#+@s2aiW6^XDL>}5lvoaS7q&>3gPq07 z!EkKYcDJ;Jrc>dZ89@tVkiuDqOU2)v-!U3F60i|6%FUYmhuCFtM{tqne z`hFgaU}@L)JTX#ODV7j^h4n{tebj#7noNs6Df|s zFA4vTEd~P83Iop1x)5gN?_c9Mk zelMyo5UPS+kQBVr0f5clWd=ZDQ9n0bKwvI7aDZU*a~VM(kvtN$q4S*Q;l-FhQoGg5 zbvq0ey&XQ1UM@*wAaV|i*;==$M>gAEEY^_)f=Ki)1;*qa%)X1ppqqy7&nk4=o3WAu zHIV4R+q3p9>;Xy+@Bt+U_;78$g{;h7Cd%K!X}8#gOV~zRu~8wlYC8F|2PLQHpOHH zh7?n(z(7EgdQae7ih zbTa@-r+aVNjs1}nfC2;nwve6UKqUw;SoAIUu&Cn?3hbrTv6dgPkop0!atrB#*81o% z8^<`b_7e)29~QMx5;L}{g(7m@gnB5VD^e4; z3FxKeZkP9oZOAQZ>h@;n+>>a^uO?oDqxGWK;-k+W1F8w{w7J)NVWp@@mgh<8G0kC? z`7&`X-%0AR0ZN&vbM9!9%!@+`)>G&H4AGpGI`=W_8rWTWA60FOQ4z-eNHRqqg7Ivr zb2!mt>YTRQ{;&YoDnbkiasqdTZ-~Kr3Kb?L<*)<4t^jj0xST|O2LB0;){7p*N1s0i zWbjZsp64qTLGYoVtJMnu z#!2{1PAlwq)wUQGGxn#k*kTyZ#$q^23yUok;0}YuE>ft-!D6cwU~U$ZlgQ6vn{c#V zv>6|L{uqqKXeAu^kBRJ5ovgL|RG-TVVrmHbSP8k-tM<<$S1bpvIR9*Pa84f|zuatO z`egZ{yR3bvQJS4Dw^Vkj_J+9OISDJ+s*1k*a|wWYJDo$(V5vbr#$ux?S^Jn@tPSJdEHAqlAbi| z^4uXr3#`a4wE!>9)0>t)wSMRJ?dx`ISRUm0@5XhzH}Ba$I;!ycO9BmF9-yKYpeuLE zRuh*thIR`hoKdb+O3iQvN{~yfo90T4{0_^Mw2W_wj9%hJM#vy9#1?4=*}ALQ0IF}v zYXt+inx43$Rh@y7=XSMGhmvY>3n%yCtq%AzXm#o}D5q{y9dwah(v0W5W{ixpH5aL8 ztP5XPL?W=$m5QC}d#A%-vQwWx9D!_sVsa=oua!ZdU>>Ky5vwn63DHBZCF+**?=J%x zg?BxcWU~v!A7k=|ifg@hUW}kz`$v|G}AtOS+J{&s<Yy0t>bmE{2a!SBD$WIB{Zw&+5O9Zr1R2adQUvgvTu)=k|#x$ev7c(O= zYz?7mnP86u=L({W{P7pEpK8X>Zxp8y0%if-xO3OuEjxGY*&poPxp&<)W83%c3pQ-o zy>b0s{m(tu?zm>l=BwE|$$`HNpzs9*Hdt0(fZ3Cl@8siK!f&l?$yuv^6YZP@V`p!C zlTH!z@8PnN$eGUNaKPC7w3Qm-nWOwtR6t7yMqZbmR z)V~Rb=xZ!3ZO^?hQlXAWnwXMD||;R7Dl|NXDJsieiY{wNDf11X{|z z*!`-+#qONanZe4yfYMn!3`_bUM)mvM`EQlJE}|4FL037Gq*!#dvYOds%M=J{#ZNNF$FMMj&BA-75Q_yY%4vb9>7 zKH%?3*c7Bqv{P#l$+u`^iKdz$x)9q8io!@_ppQT!N2WJB;_t0weVp%ZA~Vnt1Fp@p z$UxTyI9W`@0hi1`m#Z%YFtM3oThB7kB~_bSxH8bMNAP;l4fyEu$FGcnR%qU-me!C_ zFf)9kKzOCNRS@9{d0GYMajQV;cFLk1Qkmni`%PqyWnQkwivs>(Omd6Fgzry?q0G$W zFc0ola1P5n__7ap(mePAHp(^+P5|?OFPFhSxF6f5>;w50NO!4hs~HI2@q$tq2;YWA z4n>?a5bkp~kp=?dz~4alTQLy_T+%?0>o19icrD97kd$q1;W7{&H35s$iyn=SK7S0` zK$sZ1YHdK7!?TAXlb~niQf>@=9wjb^N|TLRC2Y<|Be+VQM#A}}#w7XOJA~ z*$!}Q_JSE4vKLM^E;fkW^cMtB=m5xOGZ+CPIX1$`xH~=^{$z?Nw6hP2h7<+-fbDXay?rOJ_zd`-yxbt`fm2Ey|dNO2=Q*$kb^5`3k(y`9Q;;Ap+* zHTdZB$AIdA0-ehsy`nP%w@|21r}l=h@;Wc96cy}*&|r1ga$Lo~=Z8e~n1@Y+Fb$!y zvE9MPWm;1((=NzW@c-S zo<9-bT1A1O#6h6X@C~8y8wwRBZItBfghTNk6ku+FASaPuAp96d>qS4oN1s0i6bQMZ zOu(Meu-TK6Qs%o8L(xjepV}zC47yxzo8ZtBDvCq(pAl`Xz#rr^*Osfc#jvQcKaE9? zgYj%Eij%dl=n?_$Fj#a{p&|#1UZ? z!jKPo%@_+qHd{q`{1|DKgBh4sgr|QY27!^ODkNT2kX03;t!;K`i1s6o`j8_B08!$n zeb*)W6t>7f>8Cv_MKrvzlBRssB3dt_!IpY3-hhgQ38-FdEywbniAEi6kZfV;&t$VP z6YSo671lFotpd1c}@OD%!L;E3kzT91=p|K=LLgSztYEsN4kFHM|q&f z`j!8PL;vv9uN)l$$})FbNfje-?SeL635u{Q^ED<4KB<@)kx^oZW6AmzBsf=uP1LUl zy+Xyiw-uzg7FxV=#Npse2Mn+ZRxWqJZd%`vLswO*2oh8OCaQUc7uBFMmz!F$ST29% zN@%5nER#2Fz_`j*_APMtnI2KqcVL7MYgQ^lo{A_~*@J5piz*7{dKd~;o@=EO`?mH5 z)mB+YU}>trmv_O6qrdE6Vn+dD+Em&LR?LG^Fi{n#NM4f#EW~TS;TYZ)JTwnqFb+xf zk3>jp3y#ejcxQlWl>;zz^dk632K+Qx_iTYntM8$R5)-kUMRY}!@HPRx+_Ku;6c|U) zrv4T+b$c`PZb&q#9=rpKcj0Kg=+E%c=MR^6LrA4uaRd~nW5X4vP^z-0c%1-+98w+R zi&Lg~B}=nux%kmvyX?NP9s#!O>r~PIy28;;$3TgOW~& z*P{qY5`RfD;b#s&Y}&yLh|&(paufkcW|7LWNg%4s&5>PC8bQ$&3sP+NImI)e#ue6d zlCQz|(a+(-qFp{O)*`K43a(IjycN^QZD>LfoF^I&?{0)keZZ3`s87L0N@Kx3aqtS2 zP1qE|Eb$5z`PN*avds%dk$`$NG;$<*vIJC3?QU>4kqM}X0oV3eRH$eJtPvA&z$Ft< zny zW(}A@A!{I6fg)f@z9wKk>j1`TclyA}~IL6&X8U=_0f1}_5wV-i{nw-Lg$H0Woj^z4FF-(k>WfVxt zHn(sY1y4gf_oAocqt741HVO_5*E@hEDSL~TMtVI;zH=-FHw$7FB=gbLxHz7MLE*(H zdk~0BhP2xUJ5}3a>;p%C+4e!C0P(jE%!87BkSaP6DkJrtG{qqYI5r!>3=Y`{>6#M( zPx=c2=*13zY<7YXAQE3AjEon2xJ8N zZj-MGvv0IwHlYlXO6v6rB&!Z#dqfGo($?M%;}79zz35Ny(dUl=RRRSrwYn358tn~X z<)dC$DJpmg9_q=V>L4of7zVxDYEazqM6J36S4OWv`8uu!&ym%BMXU7<>uT9mz}HmU zVpM>!Kaw`lmtj0xW-QJ%nHj6Oa=s$KwF&`4rHMeF;TuBZ&lM_6O2{D!eyRX-ivl@` z{G#CWX(kHJz(+q~j{!wNuGkSUX1>!S(^|poanZ^<7JQUKdQ5gBjy43d*;IL$n>F>a zk|b}g#wFmqssD_qY7~Ev(>}XEwJnA@js0oN`9v7c#+*1=3v;d%;0}X1cPLckV9sp{ zFgJ6`N#tkF5J&4pllbWK$B>zGcBop@RL0S*7Qd6zYQ*9tBe=!#U{_-uNs@1G#ns__ zYy3Si@NI&44Geb@yKLh^>j@FAljE_El4938;5{@c@!ISW`qLac36LM6XJj$R|@oXSjc9Qu$ z@zI}q5dhYnd>UJ%YfpBqXNmRgpv+S0<9GBNPNvwy^*%wXe30L`QEoQNa{*i=QC`lj z@Ck4ZD)YYhj%oH^_L@D`pVwyzl=wRF$_Yd%#*L4rlMVA+2=Q&N*=Py%|HPJ5 z=C~T*h~G=G3T}d6@Y8h={Bi}haJbaG$fB**(4z${&VS~a4(6=?I5r)tY?2w?hyjnf@ zx>x_E^?w|Uoo%Bhl?=K&aA~M8B!8}UQGsm6B<8)9IyHY7u|Sk9sjTgy()6s85~uT7HxePS4I{&janS(z+gHQ*Q4KzlZgNRNAepWd2({YqMI>Ddaau%I zB#FBMdTI7qRVs7GYg2!@n!3Fi?h+)LV3)vq@OH=FiKF$Rx8bADAFf@35KXy!a7C8G z*aRyiaSx%ehf%ne$(`?Zos3OLmfqv%3V#q6$Xi3O+Xk?MU@d;8&j-xBVc_F}3e6;J z*9v#3w#8@#M}OH`;VTLdf3091l(fR)QtWO4`A-r8|Ku3lrW4GAE1l3?qOT|By~=;n z@IP=2Zws~>hu2jIQsaUze9GVhj#g`+^^-7s^w02N(I9^+=AYIedXDz#JCHdVlln=) zY8Phyl2E)n0-nrtiYEvChUu3Q)GohSVW>?PB*7I3QRn z{WqKvJc=EFOER9LE#CsIo*3&uJ1Y1oUhs-c?KRM7kfbaP^Q+xWWKtGl!?n#7ncCU_ zj}{Ygz$G)aB_&8vON^G4lqG3fwYcM`qreve|4pBFD+FC12Uk`<0iv(nMXh#azPq?F zix-DN^1>70i*;SqWrVXAjpL)wAH&xDMOF3MbU&tOU0=LopDBMmPwQr@Yin@l zsBJEZ^pmKGYvpMM6rQYgtDtX5esMe1ZX3+0wn`W-XvgU2FWWYlSAh822IfJ@Hb^C9 ziCsqOJ?WCSIKZ)43ubW0T1e+)33$?95J2y90A#Zti~x~X8)0PJtqhAt2R}RbHkf2| zCwy28iGuN|zSQ!w1np^Wi0JP3!b(vtOh^oQ7(AHDGri!$NwW-R3_Yt+;^`r7cj8iN3D%pQ zxOLo3u<$&{Oh2METY_I_TETX0ut>EnMjIIWBf%5>H_(?YvW!zrMwT_h?kEASRTLPq zvjp}G-w+yCDpZ*CQIfM0n~C!kU~YjRCy`$uT!EwYqAT&y=a0bz0of??2JSn;SFmV=Z(|7_f-Oj}M{JoZpntI4Ps{|6D@bza1W zQSCk0A|2JfbbVuH27=YCV6xE+p1tv!YhqKV)~9f@t%BXnu+^!xTWZIhw>izE;x!YD zP+w$S!5H`f#~}~VAqD{DbaK@;&yE7RS$+M^?c3Mw*bv;fZujOr`$tC=LJIAZV+j_o z1)%3XQL2d;j-kLpb*Cf7O67XJQ?8XN<+)mQYPv0{(EKH> z(wZ(;!cx0guD52Y?KU2)8gLf?<{Gp@%sFAd3F5ywSgv(KhMMK&*|6E}G{a!3+33u+ zMgu&W($Fv8yUNbXH$n4RxOpqAglteaIg%YBX=u4Rm~I>j;RmaO>LlC{4GAsrF@rJ; zKT~bBP-s-^0USoTeCwW_J9yH>RP|s8?;7~p1=wo#BQ`sBhUIbtIB+^?trm=jL8lc~ znDA;(Hvpdrpd_jM3f~C=(+Qzad=tyv>C1A_Td{@CFosl}k$A4oaqF5>t;?i@68|C? zKIjF5mNN7KZ0KAJQ%^Oqffao5?`2Sf>^1}hFlWKsRga-49aypopz?vYJ;4ZsC6otY};L6FEs71 zn~2-z<;6rrGkwG)Z$q`5Q(U0p|?8 zXR=O=vh6j_C74_EEci%z%r(JzzL-By=G`)KEb_By$I?A_T`*g215+|Hp7Rki)EQ$* zL)-Z?Li<50+LN*uJ!l%tEd}$iPDc4nAMj*2{-xMR0Sc-;epuQP2*+Pw2*SS(n}P6& z2jS&gpx#B$Obflg$qP0SdVd2na)h{9;6lUl@4B1F&^ylDWyy%pyEed!#6%o$$!XZh%G(%OYvVx zLYBoNxzF6fW%2wLg4c_>_~`S;uq~eF4$%|RYJ)3ecfqa@>{Qu25O%1CbK_xHYL+Wi zjNLHb&1|zV5w=r$2k<4vp;Q<)ZafLwipSdrH?D#$gNB4@N)ShexV~u&ZWhV_FUG$`+?am> z_8>xU#?9gaxz2=0CKuxx>W$ zzT%6xx=1#|ELq7z%J%fml3iA3hR$+)^dt5dwxQ#5U3cb|Ez3OuTPTycFyEalSTJS{ zq%0zz(-iYfvkjR+t@-FNxOSd4(8^LNV*= zCOWRHhRI48JlX~y7Q^IRfz7mGqLpCoTf`LTWUV~Kv(swf1mtmWojluUwM$~_gK1zO z@jA5%ckdWgJy<2o65(kfkjd3z+{dzF;^}3h!L=;2O#DFf+^E;)Fbk{|A{fwK0Fp?l z(eqA3%1I@_Lz%$QJ0X%>A;&I+bA2ko$at+Nq8aez)Nk7+byPHTq7tY<^&ow6|;($x~x#YS_q9MVV<>!*p%G|=`=lT?a*NZ-l zk3N44+x#19WN!!=KP}D6HB_6f)fq4G49WTEOSmAOHr=_U7I$l@e!y|j86V?)8pC(W zbF~QCYV6k&R4a)pz7w&B@BTrxEyg@^^p|a({X_xcZ=RV4jhScKatT)zm}lBcGS7}_ zz+&b!cFlm0a|&)dOs+AA)5Kc>@=PF2hFI7Q?BK34~VtSgQjCSj{;@QqXqnA!R$rw?OPG;yq|$Y_}K0 z!iv}ljU3uKX+>;vH<4BZ;=|vHc$%1q11@PrNLrBMo0v4qijbUPZsD>bUVz~BqTBJ& z=Z^uc2=7ws7Yj^CK;xPz$sXE;_NWS|+liEuoI_cIOT+ zmhIy1pXeQkes~9LCx1fn>z&rMv0DvqQ*Dc}8jSrBA4G40@oXj4IMHNDwU)5=76EQr zlTh%YYbcx+xHEi1X#AW)g~@J7l6Yd{c#i_i&Kc-EmXlEO+1q>E$I;-71$@963-}m} z@o6O-1%?AgjhrOLc+R)gDKfSZO}1JT~pP`jIgh8Iq2&|ENh{9OaY-YN!2 zs(5?41jKKtp%05|DaD#;g)v{PLD*@nP zyv*wDJWXi^C(Z&qnZ~_=Tf0xPE|r3MUX%dhgaOl3@O0H+?X_yA%sTBNy5gvSm3b^+ zB6k7P*@#A7^C%{4A+1xuLD_CLY9+P8GWcNlhL-9gucbm_Ta7K!#CFx@upTy%#F)Re zS)B-2g*fx|3aSU9Yc^(*MU6r7=zt=+q8UEZYlc|f{qzBe$$)XbT8JXd?+15yqG%#s z2LPbnn=YO79pi7{=0g8B0464Jr27lj;=3_9hL*vo zXLu}P)8u=6_BV-v`>YgU-{ALD+ep$SShdQL?Og)w=r21g@Q?z;w7s@h^_T~xu)ygi zv`gh+{*th}_+}fwEeN~aGqTqnBv;0_1ls8i&}?A?BhE+@j6_J}-D`_r&ol>FLk9Q5 zz|m5eS~6rH2^2)y*9EoM96kFsgITc)V+CL+K>mc_VP+$Y2J2vN0A>ZGYd-yHm#%?b zL7C^S)_7G8-<)FhM`{ZJn*}(P2=sItHx~GlPOCh{DuLKeZd8MkMf1N_Cn8Cw;elq>aOhp*pY|A@Fsv6CqYLTNlWBcD21#cxszNdN{Nq4 zRz5a3E0nATR=7Ykb_5~Vh1-&Cz_rMk$=kKK0Y~da8}ZTS50`6E=*HYN$3>eRSZ7>> z*`e1KUstr*!4t{mqiYe-o~Fi`vV@pttF7gI88Z#C3WW~{qLN;gxYydQ^q!;IDl%P= zN#W=(+oU+80P!~|%!86iu@sUDC>0l!HN7CdevtzJTLP#V0A-kUmqCUB1Awn9K%l)L z5MJc~!Db>DLC{SEB+l-Z0!##fN~>8g4ueH6fe(vWaJ`tV%`E8NVy|4mf?kGLCg1s= ztZ=2?Xv1-Yjf2$+WOAai71bLuD^ypQ%mraMhEOWfBMb!5#~%rdnHk-odfutf9hVQu zW*F6yOOs#qdr)br~+-$hhWk+0n3GwWyfC@h1 zs)rzCdOYmP=pR(uVw91iziegn69tIBGBOWJ$|!l3m2iM3UlZ3K(;ON`(??keXe>uu zo$LU|rlgFx(UlYuaCc_`N-D+|R#o*)7&1B*CS_4o_X>JQt17LW!FgVlz^&`_D_Z$g zR#YbiH)b(tyY456#zRbI^8rsKvtc6zC<}Y(w@hUnYqcGlr8C&XTQH~+$6D?7f=#Ba zK_l1BEP>^1?j|a2js29U-Q>R)$69I2_%tyQ2V5#`P5fM%2-e})HdE5JxrH-r4abAD zHGDwY8a{@p=OKx#a1{!!lM)oL&Nixb*lZRdd}2K^eXP>P+`i{?N+rF0uonI`CgDr( z3qfz_KbMZuW2wa#HEFq^}|utU>TD4>sLKER32P=${!LsfhR|3-gfXL7PSQ3W5Sa!{(R$q^cz z*6$P6^>gT`yA_6qRigD}AMm7(`T{nx>ZqrzS(C2Nx*waRbd-FHItrR;sny@{f=%eC zZ$l%8E?}wEnhLqk-9+jroVhC+oYql)D<Sm3TBpKX~N=`JlaOtQ=wP0O( z(WCLv=Z{C4jskH4*^r0AW~mDI8yBIYVm;>2QF{AeE&OYY!3P;1MjfU9T+>mp*CbRf z#-+-+i7ctMnK~*BE!R=;_XN(Bs!M+zWdujlQ6tc|O-DV2eV?hLE)byEb<|6gjv5c! z5HzX>Ygi7_#Y$(P-l_qCL6nWHBU5A)nVM_0!@7q85W@nihM37i>a{-3pBy+9IjN=G;xB7Q>nQYq3yF!~vJo zVsh2ZIw?sqsKq3&np?QE*n1JYUi3bE^!a1RTFg;pEMu$bB%h2Fq7q7bCR6Zk+xhOU z0{lGjE`9abd8If^T#+#l#{k5%CWC8S6C?5@pVWI2EuRx)C0E^Nzx5f_)~w6m7FX0+ z34nn|(_aukUs0XeXRKe5x-kk#8j!%=o-ViXZY_~w0y{Ry(6~653E>tlo{_@0b{LZq+dF7bhK!94 zq@~m>d&U-|ufR!bA!V2Tubey4?gLiZO$yzFp8l?)u3_ovW7;5`Gws#{cv4UQ0>N_V zX~VgSDpjPwq>=WRowWn548(!6D)Ic+#jsk@g;^Cj58=F#5iOQ80q(y><5^#^k z+-xmuhmg+*zlDa=aPH?69i<6m!ghLm-^liRYNz)wjYi9Tn_4oHagz`cNzrwSLZDT$ zFd-q4tt7X1cHV1nv|jXDeDwKan1TXt+bTReub>nO{d}OprI~j6N%RMZY|jLV0?!2c zzk6AQ$^Yg-DLEp3{11tCZ4HUnzv2MIma%6B zgfjLLr~e2@5^o8V`yHUzk|K`I1c|g*!kT@8qn9gX;er{behpPCgntq&zlg-fYBTbj$TJL^HQsxik<@F*=$yvsKsV|ssPt2Mhr*22;3RIAv8Wmp~9r7lBAq) z7F@3Yb2GS{M1BTu;b^_6jgLNm494KJ5{_dCEZacsFq8a88KjO^;YUzt@Y&DoQ1EHc z*juRL9`9pSma$9OKp}-P6sf%-`uQy{`oXgZ*JfS;l<846W~cYF=hRL9cZQ9nMbA+(ig`DApM;HYVP{(KR`^z zrffMg+FU`ax<{e;% za!sWO$zxI=#EaL*<9?t20l#m-#UE;qzMwv6PJiJwC!|To$vMO*Hnj7#L-YW-s$0Rj z@7#-(n(}lC@S<112k*oYyBb9tFB7!N2U%cyIjpict72qFXJ*&jDt;phxYH2z{MZZn z4dA&Q9&U>kkoJX<2f+Mt*{@g+$QGL^x78{qbs|Azjdnk3R?tH}DQctT-NIvlJWBipLJJ zIi;06jzjEqN3|N-jCP7L@`5pPP#fv0x1C2{SbUB^7_WDNa%9WHp zEm>AhYD~Dd0<;$M-dr9)2*xAnaFB7ZN9Kn`uk_T=;Kn=?NIz3Y!cXAZ#N5Av{4Hm} zoDZ<#SunA#g0=jgmV@DOhJ1s+2xm(&qi!V-`|dtcZIvnovq!lty(3bN{<59GFIIq< z_SSYMuz65&0z)!Q4A~NosrQ7_S2@73xq{8$D4b$0jbX8Ql1<_Z0_e>SfNTz7BS54g zMj|BR?hS(mW(VWP7^7Id!?Q4YG!Gw1@31B~r^NKFZk^xV$p%%16dZbzD%<7=mgbeL z+UAFo!WBK-x^9(cuy6wGl6C{GGlX1Jw7KK9!Kj%U%*G7KU_{OA)dXx*njVZ zm7a#rC|7BelyYBn3YO6?i zLAuY_ABoxM`!Jr(vyBr?dbTy*`hft~Dgq7u>p?u*k3IxA9(W6sVEQveV^>}mGQFHc zex|<&N9#pv@X_aw!I+*_!r>?y$gtJC%0;-HQr>RiFSR%iPaKDmz$Wt-g0o24G>Nw) z*RS+iVssI%#TIE7VM)0N0}er;PVvU;xX~|I4y5}^sXotE1ow6?xX}&xRIB+$dTUk>GbbH*XW+6xaQ3y}8ev|@!rXl9ONEf4yCsZ0 z#}{MKjo3n;{(`+|GhQ%gUbF}sl20XlgmwG`>yi|jS8%J#kc#x`xaW}_4(#dXM$2`Kqpm|t!` zN{UMT{3!4AT1PbDxB!$M-F$u&FyWqUT^LQ<#00w8YAa!Jj0m{Q!)e(w74B1kW54U+ z+;|w4n&nCrE5+Gm7vjFttTFV?;)%3^x-4!CxKfxv3D(lz=^__M!lJJwb;Vy2yZx1Q znd}zbXH{Dz(sYXsuV5oUIGnKUPP`>hzNWhK_emH*ArmC}6!dK~2LFbAA1`dt7~nGk zG^;Uq`+7wyTn)8AN7bi9gn<(do(BMDtxtBKY@`vpTqM5d#d{N;671f571HG_5L+E0 z7I44?1OdUZ2Rr21GDHpKiKfEqr^N0r0VK4nKd>&VDUCxz`~wQ{R)Nk^dgUU4vCDh# z-r+7i4BD_4EyG8jKU~JH;N09!-|e|1Nrtq7eE)R|l~Hwa>^jnoX)`>KB&~y&XFfU$ zaT{~tx@F%fr8;_Wv4dbOex_yKF(rVT?^^LsqQ3KSyv(hZUA_gXtx>*tdutv2WqWHc zSAh6SM)RQLtzFC!E3qg4Nf^A^F}Te)YaX0@vrF{#1l^$iO~YU37~bZIH4aZ&VT4g* zcf*2N1}WR>bA1v_BH9WcNuR4G>dp}pP3su_kg`*x(-rrA$O}s78@?edHmq252;rK7 zY*>YNFZ2OV7T&!88%bHe4Gj5clYSK032?6_cRw3$)O}tBF+A1c}w;|qY+Rxe*`|L~w-$Ab;>Gn+%po1g@<*{eBoQS_)IL==84(ib(5p&EvU3 zs&t-^CM~h#Yg*Wn6^{;Oet~H0ko`=IOYoI?^4?Kxz|r6e1AM?02KX3IlzYbvw}^?E zMMx4W1v;Ge6sS9tQ?Pr@LKO(c232>y?xv;G609V>@+Cqv^PLv`h-kBBT?M-!pH^*) z5#+}HNM=M6FrLjRgi}pM2sJAz6yRE!J7g_5DScgr?p)khl72kR1TjT#PfEH};;X+A8t3pk2G8zwBN6J_U%$)Uu~Sn+K&`yY!|DgIWHQ zgj(nr+~!<24^De@!p zw{UsZ{|UkCMfc;Q&mXS6n$RG*1KisRQ@!X`zj8skSNEw8oF+u#C`;T9cKO}!fA|&HHDR0CtKHl`BVJguR;lrZG|4YziT90e4g{0eD zENk*Lt?E`Q5*-SBvuNy)_sp9v!B?8q+nZj-(R$H1KKlGIZ1H_fVd5JORhaMo+JfXa zcA<7p1H0XcAhQHG^c&XkP>uPhiMaI?-shB{1I$oT{RC^(pXpqsWAS&=cgX)i)Of2P zs629ePPHvYZaezRmfQ0R5dSTec~Fwu$7^VoNQ}KBT)xEthD~0Z!612kLTZV@w2i+c zK;Gv7#3rYWfar1>DYm<5p?oFi-@4bj4MvLYgb$01J}9P|meKlN>kJw4#4IMoDsnk9 zz9oEqP7GpZ5{JmXM?pBOJ=Z__fG77{U&BV(d#+`W%>*F_Ln_nvuwiP$CEo&79>*GL zc}zd>f=}$W9)LzJEtlAB{hPaq+->3P{dZem5fgF1C3jnLk8J zoCV-Cb}$4jHwa99FUG$hfMy&3*;Kg^KO}@k7$q0AURH8C`Sk(C?V!C#9 zexX$7>`XK`p`jVzy(f4<<_unYDb9IdkzJ|ez1k4|Ut-0-L-oH<&1P7t|8+j#N!9;a zY?Q6~mxJnm;^@;tgYJJ9woK`M`4&idF>k3!srPw7D3t%Zp^-z$vcvc_Pv|?{O{DV2 z`THyXc`*?OTvGYVwKuEsB;jCcjHG>Y3zzc$27=d%didz`$FP-uaZ%37e0O0{&I&31 z0{7{auvVR^w!`Lp^Z?@3Q|X^ws-VhOy##C3pJ`QpObO<|6+Qk*66hg8caki8JgYxZ zZHrO!j{dUM{K>Zh`Yg7JO^ulcB{dJbafMfj!q_{)W?l?y@If__O82xm)*7`9WL3)&cthJ{JhTxJgKs;#YWjG zyL1a2pm5WHUW`}pYd$AD&ncY^#|1STY)*7cb#D*X!boOTrzLr}?a-7O39cVcS1 z>Wf(s<<9hl(+5Sy8AwJ;!qie~3Fd*G8viLoFgF?KN5om5vEttzlKq5gTa4jg?2l+Y zx(mj$rN-k_ld18V@qf1fH?3o|NL|j<`1=(qOdg7am`UzRzNG-OQ$O1OauQ0;d&ld3 zhNJbO|A&u0e+LZi?yWqj2{woXL&&fmWpF_w4`_q8zPe%CkFgMN%6mBOo~_e z>y+?sKk+J9*IEvTn1_eUc<&!OR)k;T&a&bs8l74t80YW#LBau?nc0C`0Pz@`;9$Ad z3F%IYUn-brp+HpWy|AmO_6iHXJ;K{;^0p@f3PR$g1?i{v$%% z);vIC68+{F&{p9oO*@>Y%U%;n^nw?1B+(OJX-V{Z_wCJ>L~rknqY;o%ftlq#S1Uz{ zeo6FguN6cq4v|armhW6GuOxa6i{|sl;hdTr?j`CrR}wun&q@Q~C)B(G(G~M73F@@i zgbPWc|2^x1+Ref{R9hwBK&2=jhtT@SrY zRbrNDlU`5kFdRZ75NG&?R`7n&xis{w`i0r_8f4#6kmYj`Rl>t7v3B3RE z0Z+P!eu9n8k$ef7&?AX{>21&!?CALMH1aLDc1*|9oQRDEwXGu&*;x*a9IlZhz8AZj z$jA=jz-0o6BzkQ@f2bDJN(VBsBiCON53x^{%SO_&xrNJRb2;L<7p=udpFdo?I-x;^ zpF~e=pP}S(Cec&Bv8z7@PU@ic8E_?Xg`;Z_yPjIO@FeNO*$I^ z(WNueYMux^F@#3>R>^!Xj1>J0J}i>?Zw1cNl3CwsS)=b_QLVor+y++MI)wH)qVez| z^q2U6C%0c0VmDlj1dwXP3~&==v`^@-4v zz%yF_%JZHlLQkESFhZ~TVpfET(7U~{OQ~fdLjOiYu!zvBACVkxM>}uS^qgB^q)|uFqtk1F_ZKz-K_w#Q$I%NPBt%M^6tVQUFzVk%rW35;2pPyc}e;%_|mIEUA^;H^7D+f%u z(EzbGp-?t7iH|;A0wS{9oOS%cYIvwLS;pHPrC%WSju`O!UX+9B0pG(G>GS}&|7vCi z&WwXI;2J2Y;1*ekZ37$uhl9PJ3L7(FyE&(#sGh9|?w@j)TSq?TzCE7UqQ87Z4*o9vX{iy_mLz zzLvnje{j>vxTG!hZ(5)8u)j=4UQ!|S6ayk{O@(bp?3@mp)roQ~ zPGRB*!xog*LP5+_vr0!0F0>n(S;=c=NO>0zOnJaK0& zzgBLt<0;{~R=leQYJXA#t`5dKZOlwrKHF%uOXAujxGRTWkAr`(vmh054u2rR=vrTl zMwep?9YqVyE!pk`gO*#e6&u=eOGe@sx;?fr(Qby?>5Tl}@f0fij|g+m%>y+im)sbK zdh5|g9kuHA`CGv`bzJvJoPSElKXizs##C`w2mLugT^k0}kDqB&s*}~Q*&>+Lt2o4i z{FI=5UNO*;sbJVN$(nFb16m)G#{dtrI zM6ed%8DsFI3(CO3O3;$imEIAPf7ZG%_I>E5Ra>Q(KxfCCt_dJ{S(NsY0Qq~>nQ13y zk5d`}A-NNM4EnZhVE=-BAHR}MBlu4U&|q?ROJ%|HopdKDob?RXBz0!S!zSLA2a{x$ zKjgoLH+SIX_&K3Pw}jp;|?6S z^uPfw@s*t#oq{8Q+b5n*Bi{o3AAPA-5O$^)Tq2L=G-%{-U@}jKhT)UkO{8NLXYJC& zB9BHJ;Ad(Ht*#WAM+y$XD~gm9W$rRZnG%gOt`iaQiF$RN6!Fmn1fx ziz|`2S+;AR8&q2*OJdpwE`LqJ3GA16OQ6(LcmDdv2nx}3bS?C4(?18;_nG?V*#fk* z{?Rtbr|%Zm1LJ+Ia9JOeu9JE&e@T;nk#+J8@qN1j&&vCZjpbC7T=jONz8**GMQ^}I zpFf7o%8o1146Np6X5VLufcFZ}tRmpr zUCl;2oIvx^Bn$#DP+PL>DmVnCSj-AN)P!R$@TTaduq{DqnqP}OixuqqOkr`H z0L>~aHmifQFl!Z9A0iBgrmJw27Vbc$1CiB#YL40#mm9FDMX>=#*($$zVf_(`pKL|3 zLm*tFkl+>w5@GoT!WJB@7j4BypFf5y5FEF;8<;lBDq*!~gCCb{=$Y63_zHs)?f0z9 z;w$05lK&*~n6Q$E-HsSjZOuYJ)n19w)xT-@n^hP70>C)DCID`LzHI^^WZ!2BfaeI% ztODTio8-OT=&nk+o$#(RDS`+2DIwU~i_9Y5*H`~f-=4abC<7mC;E%@m3$AE0> zopAMbFRT>k0WV5W@JPu5eGr&zB|7pI7mH;(@UH1cq5L@_7T$rPmOmj{{G1i*b{X** z)z&B@yenRf{b@}9aTw3W^f=LEnw92)`=kKZ%JezYto~J@!X)b)Ed9?4FgHufN#tkg zU*KrH=%^PlmS&FuSvs$)uc#1{7K5DcZd-_70J%)>&6m}Vk2Oy4+oKS(oZn)(cJnNCh3Khy2P(R$Id z@X_awAv2xhpf7`wYBqlp()x(UAEL9yM4HA#k)+7X&N~|H|9IJm# z8`Am1m9c#3=@WEKs111ROu1Uu`j!7qG+)GNWrBd7dcIUEJuj zAz@*D$Mi`%y33}*dI&dULvl9!qXJiDx7u)Y82sb-W~0#tP{YaU;rZ^-7tME%=OB#1 zxHrKMmWzLOnl<>>iS5S3*m!y3Cj1saISycM&dqmEorG@c-~`vcd|CIz7C6NrGh^&9 z92Y+`|FZ51%)^+4?3o!nGrk2Kp3UEgQ{-D?hpO%Av58u_)e7~U(0NRE`E0uojej{7Hk*y+*feCI*Ps|4$N=Ux z0ZB?Ham;JI9LIW@@1B$RCecOoA0Sz}D|o*IgKYiS_!o)B-IH++KzpreKv50mG~Ye3 zR<2KV%2Od=yaN9|CWKR&PHTn}jb>%663znUz%W&Y>BW$RH3`!Mj8q}W%n4$8ad$tL`yXAh#1MotfD&MUsG6_5z%lVY6PY;nJPN-Y{av)u&gpt*}#Rj2)gqf;u@o z4Ee#~nBJ06$wYhXV6|1{Bzw{rr10QX@GubpKu>n_(S$tH6>U-z*=3rQ-kGc69d?-h)qDp&ue%sRSIY5&$V~RP|1jg7w#q%%kp4^(Nx66mermIuaHTXZ!@3C-PF_8NS zt(h_~+RYu{>J}jCH1==)PmE5M1!~Wkn1;AF1izY`-vG-Dh0yw@&MXYE0-$SG+kk&A z23`)-)0n8%CxHfpTsRd4MXNKO_*r!ZX}8vZ06Ri-EE7pUGLY(30S=x62&TiZ4P%@! z0l&IwECktJ8!J~TD0dmur(n-0jay-DlFPK0cNc~AgYyso?=I!i1lSiSv0ATGfj8P? zZP>zmI>t6+a%pk00U3 zj~Btm&+ud2vGT7^;9vLP$0^6b$C>ysjvrI_@tMW&@mKh9$`bk4RruEy{P-R9*C+6= z&*I04OXXiz;9u+U;|~0I9e!NA3_dQ!kKe$Lm*U5l@Z+oa@xkTraTk6ZeZ2hZ$@teZ z@Z&c1*T?X$Pvgf)C&0()_;K@z@NpPFKBoTqKK}I}eym*~|C+(S+W7HN_1E<$!9Ne+ z$2-(t_u^kY{5bz)`Pa4h*A4jbZv6NFeq4PDd~C;$-@}hL;>RaWg^zpiiHQ~h=6neflc@#CfV(Z!Fi;>Z8* z>TYAIEW-efCr+IZTR9nFFCI!10p+NOF9#wxzL1%iD8682fFQRAlyd+<2Ihz~$111R zEL}5PHY>*rXZUtREt|T`#4&BzmNTbw#Ecx|u&)2X`)8#IRt z#~|-1p%4zk3FseTD}i#sdaXNDH>3=+RYTRnd1!^2XM{R9tCjSuj5Fb9tqWSeXt|%0 zTV}zBTIZ=&a10lspu!=ngYUKOQa#{~wADl%hJMf6@=}%H*K)of<0Poo+D9FLds?0m zGWwudtBdM^sUw9{*r4?t<%a>IY?V{ha8fHMTE;<;35%d%w6GUCv?60E+# zF4opgYB$`{%8rw98SIB<_)p6@M#f1{t#yQIfzYwS5J-&|(&2qAKlKAV?zELmO@mEZ z_o$$8LOKL$162>-j2D{VU#-{)GLDA|t(#N_BqrF}L+yi3t*D7I#(`Js8g&btiMCcz zrBE(p%+KiO6TwHG?HBB#h04TV~tP`luUR{m5OSHfJEun=}?{X|`Yr;}{e zQ(NG&R&cV6Pr^d2AF1;Y_M)x%)MA*OB4omLtuxdG2!F{|I+X$2v<9Zi7z%T=)=}@m zIjxX18J~bKw=fJmPy#3641`Rxl|;GW9jyb@5$MqxJ6*?JVVBjP@we%^%WeSE1ZVV*KE~Lb#PWIX`YO3cu(sP z)dE48wtUoDIIfj4U&d*WvOt&t^;$=%QxKeG%SENZMy+n@v4uh^1jFYujv}oO-x*_Ea zTaDB~=+YYfri@M~*E&EQf`Q9~5SZ|mFcqq_zNWr~ZY`4|V+kD8iq4fW9?G(lWJBh1VF`Syb&k3S5&5<@QJbMnE4@I*4A`dCN?nGi6+#S@Llw9Rg*2$uYN8H9 zKV!>FRf1pZKGlDv;P42eph)W~bsb`hZ0(>L;HK8FVi_YLN9!VW1stnveMaquw$;K_ z7*S$t0ksr9*Sbhu0f*PtX6hq|_6cLa52qljRLF)sun#)5CX~rI8FI@71C3gLQJrvN zjc^(wDg+1QYqe2VVML{^Txta*t`(A@R*SRU4M)dB z3e7E)#WE{5S&a2wVK>9x*So@d_)716vhI^*aZ%1HkFJ~pw+?;eqTW5Y&nFJHe>L!* zhV=P-*_iT{Zk26@utz`Z!N17sw?MTDNtc z>>J24=duGK3s9ddm3#l7Zn^Zi9HN&4tKE>o;#^Nz9;@pD7P`TC>_wlYomR*ttIR@?44N~B+#;nz1rP4&U$Azy9+ji-^bj!V7&5NS6A2L)H$clcj|OieRT5Y9$%Z_|Jb3p-~DA9CW--_%YyOXgcDxSE0ypq?Sj_qdRhJmW? zOgdA}^qp+knProSoA`F&6`O3^(Yl>c0lYtW+uov%W%i4ipkS(FqQ4|_j})MB+!si`0yjcJxETY;Ht$ zi^`;IIx*MjRpuOWjyns^3Fm-wlHFZ(!nVB{r9ogvtD9l8fsDZ3ZrFA$GA-8(ns%)d z#z`j%n|2%zc#Gl0t4-fs<(ycFVhr=t)%|J1nHT)m3_L6|*y+AK8U>~v8?J25X$dh&C<^h-LQLj*WOkgQh=1Tx*lwGF z6&tNEGS+Qy%}m^2-9Vnv4lTE}O;52M#PmLbv{r;d9AhKZ)nj>T__4ePk{yn#r>^b; zn`#iyEL-&51jF&`4L@vd6i5B!5E3#zc>TuhXRfc^x?^0re(l=Dwadl_FW!9m)}56V z#eqGyBe(&IKM?m3C!5`B`{(11Nt1l06WOsH-9vH`GDFsVHshPYdTL^>vdP%7eIIk* zan~Ime@Wep)@iPhQe1aVI?xEkq&`|a&-Jv{a(zriZUT<6Ql6HiJG>-muC|m`KB?x+ z_g*7YWANS#H!w`Ya^u`kSkO)1vLnUz;R~p)r=;n2CfVdgh~~WHZvLd{X2a8cicPtJMP~Tw1X%nMJ)fEE zX}B@?4aN(8b1^~7Qa_1FYL>ap?W&T)yM}MJz^iW;dFA|`nv-BL?^>}KPlal46srwp z@wYjPPY{cHjzhD)MAKl_&p?K+S5DfQI7uzn*1m$y(7pZl@IxU%clFkvyq_g|k~Rhx zdTE$KWZ7>h34L@J@1cO61yACcwHrTryZ+wm&tATAbI#c1zbnt*zOr@;E{Rl)x1JCo zOy{`w$i9h*elCntckVjoeWxKE6vxsY$&0y1A^>zMN*j^eESa6_9a^?1KV(`yD`oN? z2LVItlebExxhJAva)M0~f^HT16@b~(0XE9WEbC>nGP25RTO<*y1dopj0 zm`I)2a4o$jbCzPNOt6Dkt`;RIU5^Q@N%5v0yI8vsWEZ&2XwYYkTCo%3f<%9~q3_8p z?gX3Vjquf9!J9h3M@@^>V~nS@cGQVDzCx^8IxVvq5LDysVT}y}dD1Q}sYroon0NRv zy&qQ%I$V4Cs24a{v|Oiksiv$#kCxdybqQZy^twn@`4YHy*I}=&y$;?e^R)l0Aq@m2 zH4{FhXs%>}w~6=O7Je!R-n;joD)zoulAk1`D_7I>@c}e>MAJquntBSO%#o!EHG+-_lm_#v}yg1Pzp3EV{@ceVZ(zjnUw^|W=!8F?c(;z zGl{c|ILqehN!Y9-J^*L#F$8hwiL0SAMJoRsapR=WbC~+uIdcjs-wXqIxH>8&qau!8 z;61#Co~6^v%^$pVOlq~L>s>(0L5&cC)bl*DOZ&NuvM$rOdEn0Mv z*NK&}DPf(v_&jBWZPN`h@6XW~n}#fs?T(#!e?gDjycC~f4SOGY2&eRm089>p99MYz3nQJ(^G&(9N z{f0>-O!9sM;`V+MKP4#gUPTVQ{!e;+9OJUR&msAk_j&wQqRv0l3ury8)fcEF|MpOU zGrxK<$en1@SAncZM-#D(KsJ`cZN#~eM&yNpT@;Gp(QSi1G9Y)|=CJ`p348>R;jFs% zY=8SKFDN~B9-Q&RaDy+eO{0zwl$_NoUX0cW;m}>|S~joQ707&h5UVxtslFOmgb9F* zQ^enQ=QRg>wUGELr9BG%dVd4`@Sa15-rrK{c}jgnrM`;PeeY}h_wV@c*ZJ=^`0wld z_nY+l{}w0P=ALj8)r&a!fidBvSkjtXZk%}zNqZ!qJXLF(1eCfp;{s3DspTF}Nh6ZW zKBTq2#<|v2`-{uNL1m~K88cK4Xt+02eq2$shlN~4?ZT zh1o;b3SZt#KcsKJm}+WW*7LpQ^zY_>)qOzdj^GL3pupc( zzRIieMXQdxuxZO~nTXp<^_{+)KWo~*wj0{LuTbgZ-e1%I#Nv{^uqo0Tp|xG0k0F+S z=G>XPcSZkdG3>ob^~qwXu)oei>w;QUX6%X|MwREUvx zuZFt>?ENJb)l2U`qetPn{S}gB&u!WJY9SAc<$;0TBL_rtLn)gS*b-Gz0`uM|_Bngb z_>l29{+{R-)1y>N0862e)}7P4A*ICeM^JNsge1p_^pQEPja9`K5${h(GRHkR2_;AS zSIQ$K(!NwzqF_|d0EuwWu3}umL3@@`+(F~1x4(lHVjsp{V)xk7REXU_Hzo%ykKL=! zoSFBNVEkxq+Pi9@T?o~yHdUZi<@9jbz#`?cA+6`sI?=S(=tfgDGG>=;K*POVwvQ-^ z_TaKr^j>n=j;h$ZV!z~a)ho^Pmj_Tcl>1geUCDiWpqFyMiK~34>HE|G`i64lcG9N} z-7=pG?ERy=ayw?%Z~+h(BlA9ipMehD-JA!N4qd^Y3$ODp10wXG^kBuf?OA?ptG&~#Q*btwR(KM zuX=R3CnX$yRWWs_&jL~gqlYE_2ptO4`(sLR)Z?kQKkAvuo=^|fi>S9YCe$$aZ+Grp$8iBM{(|^d7O}b2Fl^Ze|@%O5cF+QX ze<_Og0Bse$m!NG{v0pN`kfT{VdvFZiLj^4*Ae-yb0N__KOH=dE0BVMUt)0{qVT-hy zT^t>@Ry-aJM%5UswIE5#tRx_(Q;4gnIy;d8hVJ0oK!Onr;CK*r`hfR-5> z0&KM@O5d(V;+__fd+Y z4NtulXd}KAzkf`2z10TXynA%Tr}`WYOp5dC%}ay7<>GrGDjOH@Q;7hR{Jk_&`IA;3 zv#d22`k_V&PgICa@um`_H zDQ*vV>aDW}W80=-`)-@g`(%6ieyv&=%{DxQ{ROfKeA<`EN;^UO4rBpoElPP>#lF;6 z#fG#QUr>!y+YH)vAn6eV!*Y}}HAR1@8ry^Y*hx{re!PkvhO!^8QNcm><8wK^mG-0f zIpm4Uk_WrCA){2)9Q{^bj&_-Z(jxX7dTf7M2yBZzJl;5B?*FSRgQoC1M$4s*h2Bl#x|m(%vRW{= z`wC`Aw7H=gsYIL6HyG}0SkD{pDta9XG>8oYLE~CJhDy*Vgj|o@v|mVFI)4Z$iu3t7 zi!0t}J|~JrRT$dOjJ==;>u+dsn<2+By5smVIuu5OQHmQ4p4yAi7riu+crb9zzLJmOe`(JCfnw2a=j@jiVP)BL&2zcflj9hD&c2Qg#hm>nrTCoXsXfeD zEw%xtY25oh9oyh%7EnnM}gO z^l{vu&B-#hg~yb(-tJ>d%`~EGS?cN%mIaw3E@Q!&H*q2a_sSem7scSH83O)iEm~>2Q&%bp#_|jo+KAovJ~eoV=Wt~w z>FcacY^PRO$0aE!b=cm*{XRC1*65mCOPWdjo*TOfSJ^{#?9?|KzKwz8R8GsOf@!ya z!NfQ&#pfLwUCfKs`9}%5qv#l=&qU~4Yg)LEKaYc_wH_d>xCz}qgDr!P}V!naPoQ0^pk#=wtj_$SMmsRCv;6Ah` zY|^O?WfzW;p@`E)S24GZOLEW`Zh|6;=w7Og3@X!Z*cN8+HYjjxJ3${0Hc@J$ZsR1M zU&oPNvb&t>Bl#U#&{e-BY}$Qxzz*)w{Z?#7SQAWNXd({tVO0RVOW+{duud4<5fBB< zN^mb1vipq~fwH^#9!Qx zoku^6B_O?b7Wko4estOUH7wXg>P&P zD`YvrzhaIk2d+Zt+KtdxddZ8vqbpODo-MUFD|_XYj+WYo*^h9g&OY{FcU$=zpf4<0 zGfc_a0P6BvTrdV;+4QA6|C5l%i`h-gN*uDq{KgsF7>X!5R0ge-J+HF4F3r0^(@!nZ T-E~rR_Zuq{fzHE+x)VRs>kkX^Ofin!6Oq2!;h^*fZ0!-Nl*d zQFjlyOk^OEAzL&$hvZg*_{jCk1`@~y3_~#x0sfUBkRar6A|+8AC_xejIRr;YkRUMf zz3Mu;dwQpP4u&MK!|LifUcGwneRaLApPzp9D;rb%U$D#TT6Sk+#b`7-PQ&!VV6NfR zdu_AhhhGX0JRg2GTnStZENojh)tZ%H-tI*nI-C!+PH(J}Qy}_A7meV#5xxG%ubPt_(+_Q-2m=|iMS#gbq zZFK5prR#Wp*LCWq=jFUbbG$?KmVJnGV#W2)%zekU_G;FSi2s^_yJbXh^S~O*F{bV* zmR4{Y&AcOO=Bl-im}%Vv4q6{U@7#>PTk*Fae+R%F>vqnSinTXNita0+n~ZhW=vwhE zzUzq7ZX2D3SN5GUv8#OE_O0?s!K!lGKyQIj<(_AE*2}BC_K6ECkwokXM$4>Q^U30^ zc>sM|jIaBSZ2_Yy=%P}v*s^`oHCokL%c-A@xBI~YeN=vW?ZoM$YpbW8DIZxoe*Ez2 z!{w(BpM31pGb<~K1!I>JaRU@T=?&=6ptR9$-Q#r)QuDd4YkH=84#DZBLz;gvm}?oG z^`5a#ah_$iTF`#WUbkBK^Q(rtPTEFdv1aYHAQOs71LSzo>4JH_S@A8`gr1QZ*b}5; zb#L0mdy_P_sbup(r8&2+@fu;FymHO-&zoka%q#B~NYw*F<ed|p{7@XXUKBz~{3`|Xgdlxttia3KCjrr#4yF%7-0zXC z7EhXvFBhj{Uoc~L8U${~rXaGv0^K@0c#4= z+O*Nf+?Z}C$<0ltY5tudXtut7Y&(ekMvPcZ+ea}1a5{}7aZy~Fydp_8h2NbNg^*p_ zO%ceW()8sg)YSdqSk##Vfi@(`=+*KQktCl`QW6YpQDS)X=+Tp>PFIhg{`7o#=zpgk zIkL9;Fl8>Ee*EZ39+Jv(Wf2wiAK3f;AZ)a%))~vVXw@Y0Sq%+!Nh>nr_G%c;#0LVi zYh4-O$KBmR%2u@HkGJg7Ussa`S5o+*xog4Hw=Dy zpsbKGJKahGeaiJ{TvsN$3GARY-dnDSM2=g*pg0U3ueTe~yUNftB#W|UR{hYx0E2Da zGDWtMgncU5j%iDr-O^Z2VQzvqRnNv4-tW1IX~*6qndSSUmN{+}L_fegY8hphcnN$8 z5HtQelbL0=rlVEwvNF-jCl6Vp>g8Y#G*);mn0|p~9yH^lZ4y9g`99uq_LHi>2*Wrd z7C5mqlcOn1jNV;Y&BHLOFJ4o8r>Y>E;vGaW#)uKoi&Qh8Ty0MI9h*_EjT&1*8iOVp zn6sgRFqo%moEpQFGEDFzm@`@}s*EOT?4y(~n6LUyy^1M_?}Z02PoyVKk2OQAyN(Fh zD>0v4OONQ280&yqJ^`_2os=a#xVm{w4j*HqN3-moclrlIh0hLInOi?g4sxY2beF`9)@&wmQvrqEc!2M z1dVo7{WYg?Ax2-YczgM|as_{f@ON9JZKYsGt=DRq{-*6L5d*52o3-O*?dU5hHOR8` zIHr`Ub59V9(cSh-!?fMnhoKWSK1eiva90EU*-J>DGaYB2*JWaU%08EqC76j=7zSHz zr+FKDKAHcsIr%Be&rz1BD|3b?teGsmPLEvw1~#4@9laRyzLNaVilAUkqkDjtuUU(G>#R z3z$PMh?nwt2`Plx@l>K+9Y@B=bW{@6=b65bMUwC$G5>06CBX`ZLbeT$a_BeA2!QRP zCS3yjhf$mq{!>v|_|LBCYxFX^J{A|mk)EuyMtVF6q-Qt9bHs6+*BdQLq@%S3_yD;F zz&pDg@7Y28Bp@sW>Hne%k&wYOK~rJzMXKT4t?SToIJLZ5Y}l%I>F33T4@I@j5e*mAw#4 z5LprSg;-Q@2@v$rVcMk-^hly%13|W*x`&Cs)Hnc7F(@dKH$yiO(H&k(Bz*;{|F<5&AH57ui zuTjE0SPKQc0ET{8i>=!~e?)hp;gyZDheevsIxWrHo>*TgBh>TEX0JsnzO>1RSvcQi zU+wCS~cuiSKMTjSgb%4)P#eM(H$7E;~(H;Pj+~t5xGGfD+x^ z-y7K7Dbtlev`KcvBu1Rb2KNP|@mgW3F6_RN=GiG_q#YXix1qWLXmSy88sGGH8+o19B z=(Q(iV6$=N0}9l$rsMh?IttCXa=0)__G(+Q%;hsUJdPGcqG@uoGI*1(G6gi znFmz=Dx@tBs2)0n0~~crEr5!>WE}ATvOohSdyF?9V$+u!U!r(QHVnY4_!v6I65gqj1lqu+mY0)z}I5{q!N@opzzlFyos-^`(-(4t#E9dZ01 z0S-PnmV(g^VKMmVqB0iZCl@}}MawhcV>vd_Sz7D)bULYNx6CrBk%EJaH=47*C(6%O zpF!6BJDReQmgX7}eo5h*6?hg??YD-ZO)ky-5oOwBX>Q@nnf(rD)BZDOqKeh}Cwq@F zk}8&hS#kU@w#lVm?+NB)Au(G2ekfYsr_?vFAK-G!TZtB{+5cP3v&F+&qbQKyDWYCou z6ztBF35*W@`Iye=_nU@1fT{3j=wZf|dkool_(w6*HAbt{BP|j6MzgWmFhV17D^P#|R!8 z10$^ekUOVA3CEPVGmkpF6N}Lddvz#=r4AsDdG6rEgbcqrt{RRf^YCM+=(0F+q|O}X zFC&&>1z?!AoLD|&-yv>C6RB82-5akD?2UpL@oiPegfXJOU~O~QYpAu*#tHEtcjM$+ zq78WlV(Fy$Y|nO0EI$cxm(Y;$M)Ua{#iA_GN~wIpOnhGvR>(}qc8qQ&{v8!YX5s@1 zaWla~W0;9C_4dgL>8(C09tKa016HKCvBE~v-1&G3{i-`VtyDLjQp;3{5{x^(n^uKP zSaEbj7+rTii3%g#Jxn34yF7IH zbazsit9?7h$6Q_3XqsD!70|D^pQc_Hn5z?Nz5R@kim~QpPpLvCthfCI$Mp6|)LKYy zi3hoQdrGw766x*FDi#f^x91gMh4faoV|2ZJ85Kr)`wE4)-ty2GdaJuF$J;Z@-zMa} zOyiQA%#r)I@aB}RwMN`=dmcxI$$fc%XYLN=>qAFxBh^X7Y32E?p*j_gx$M^|hx8j) z>zcs<=q1rnUR)0gy=7z;tdl1pdQG3S)S zomB%cM{7!^b&tC?*R{M!+x0B2rgL$1&Vr@K1chJ29JE-8=&?i(O zN?tJBORQ<{ND~Z+PsC}Gj;hkKhI9o_gk_SXjRLz9l@uD}-cJcPIq0NX3%R{ZP@Or> zjc-;La^e&kRVc0IoH3AdX>G$eB;J6Z(G3`BPdneKvo{QRa!=c(Oo~ug;w#eQk0K&4y=mJ_jm;kat*Qn zE@f2?`L$wapuOB&ks6wvslfjGn;n^gr*T4}+?kGh^VpA@bm(c&@AB3PuAxLUmLA-lk6{2J~jdv+$6JgI& zvD$Kfs7f3I^D@cOs=?kvC515WpD1Ag%=>|$Iur9^lhiA~{X=xX6+nsZ^o7}B2FEG5 zE{V)}U?2_{%dS#TI*L2W&8RanfVWVH8$ceqOa^eI^Sql|K;cR<@<~WoKT!m?e1f`9 z4YjYeId#Gp4~{;f7{)i{FzR9^el|NSq~r`! zwz~yu^WbX|J|&`qCsCA^jTc1&vUM2i&=|`}<#i!v*+N=y#Qkkmh*IFx zhsCLjS6(mh3(5&5W1!C&VPQV1rp35mmmc2JRs)$g$K&pD(N zI*FP|N*q;4q(?q5j*%MwC|R)+sNY3Z>~HW>1XR8yTAv9j@pZrq*A&6ij5oTYx6O?) zX_yk3LEK1deEEJWKQRn>a*gjA%Cz|!-$2)u{gfBG$?Wgo!XZ}`n2g0LbC$=-!J()W z9xDfsDQC7thx(L(!U*Hm{4COGg?KRhy4jLwNDf`{qi3@Jr7hM9HDKLLN_2Ln0_$d< z0g(~vKTRQy`aE=bQUCGDKrA_~+&4Pxr`%RfPll+Zk4ebRlAMe>0Js!>E9ZpZN})=Q zK?{xwTvdotx`~Yn^2^?QRPYOmt}#Xh*#sm;1$~Yx0zmrWHGF(IhqOZDgly6hyi38@gq#3&CS!XzU11EE{MU`zn5l3?UrBhRh*EY*{t!up&5| zj@JDB-a!7QCVpuwdqYu`)YVirIbW2GP=Gkfg5x`=GeVAcDa4V3hsHyW;T>Au8;Wxi zKgTfmY)JZS-)3uw+KFTw@gMBZQg|sc=BYw*n{sLSG4Wd*uhnF0NuDa<{kX^C|5tVD zM#}O&Lp> zUqYRcGGC++S7sg>PnmTW<{ZfGN7&fe`JvBpXPumnkuvzou!xjc^@Ec~$5D}dzrJOS z4(p4%=c4|PRW7d2tj1O0>U8_N9-Ne;@kjuEYvo3U<;LI=fXmg-RdTM1eO%G2*T)uSz%FRpqsVs83`N_YkfI z3$EF9T-;({o-@JDt--uywAABtuw-u7;G&NUOgxzgw@)?9T5lcI?L2R|9eg7cDO}TN zBc_DzsGCGJ(Z_EAtD2p<)1a@$2c@3htlVAUcWd03d|5SJ7uTOy_=;N#-_3v+(5-xa z80-=sywIgg^HRcKZ|Y5|2=+FVKiCXiwfMuW4N$W@9U_pXZ9LS6_@8B)oybGA7wSG@tj;r>VEZ{ z?b(sY?y5FyLbG(=E2D^&$*w}8fY_{=}oI~2Mol2z%0N&NQ8JrqJExT25iChlQD zX$^Gw4&2p=4v!v>Z3&i0-yk`ibqHe1Zrgr%eE0rfXV>gjp(Q4?6jv{zk_C#X8K9k1 zBe>4;{jPVZSmqKIxR zJsUz~+BLHQ4ZZ*hEYtK+$F+5&I$Jey14XNf8-2*`a;lf8WU|Jd*=j~M?P9Ra?3|;U zPlLJ0nm~OaiMWIUKJkz{9|K1d)(Pma1fn2WK5lG98Q2~mYaU#ch^3tt9*xqP>S2aV zDy~sQ@>zm#^5l)twY`0YOY<|2M=0Hccq7=3A( z(YKiSM==?Fkdxhsoq;GsA39_7Ej0E`6{7F?F#7Nb>#7iac7V}`2^cvsGjelg9WKdpgAmK-RY6t19a9MT(QID4cIt)M8tmy{rh5g5?YRrNW)%0 pTs#PNRG~7EiRc|Fn#<-6yHjuV8l(&BB$o3Hvf;wqMdylF{tq;w%~b#Z literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/postprocess.doctree b/docs/.doctrees/cli/postprocess.doctree new file mode 100644 index 0000000000000000000000000000000000000000..086b967aacc2d5b838ecbb8d27302789e9d04462 GIT binary patch literal 286759 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/well.doctree b/docs/.doctrees/cli/well.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9cb15903f8a2a1fca2b91d18b5f5e082fcf83b96 GIT binary patch literal 18707 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..685eefff82cb930f22fef63e874c1e76b373c58b GIT binary patch literal 713745 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 Q*`bv{O`5dbNm^_F12{hgDF6Tf literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.annualirradiance.doctree b/docs/.doctrees/honeybee_radiance_postprocess.annualirradiance.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0d7fbc121d3d1171d4b1a567e32269d2c87f4c92 GIT binary patch literal 3599 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 Wv2iG#N#OBz97KPnkD;xxqyFDZLXY(T literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.cli.doctree b/docs/.doctrees/honeybee_radiance_postprocess.cli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..93efb367c0d37d9ad021cb46f556cfcd0f289b01 GIT binary patch literal 4900 zcmdT|-EJed6_(eQY{@^ece6o*U8i0Y$$FcWv=_YyQlJQs%S8mV=?{u_K~OW4$eJ^p zlAN`CQKSv9#TwvUn7qNFMIIqQZUW?m`UL$rf0DIv?0Rh9q!^6YFbH4M@e{X;B z)}2=I=lUk&BApLu9H%N~#=D(ZMR~$f>p%C8{^9@TPhD5jbE9${G4EQ?h`5lkW~qPX z-9b>dLYiT$hwk+*>SeHH%xv6Iu1lK3@=e#N&Ny~k zQl!j}^9gl5YONNN+#)t17MmhA;oRGiq{cvq?{-R)@@pr~v&CQnw>6svo!o6(Itx>t z_xU}($M5q^e(dHWt`auVd73gkI#>D(f-)e3Iv#_iaIBfdaZIDq#AG!jLv3*Ux1Zk1 zCw#ZO&Dd5NJ&{0Ls)f#9cEg@#SS;nm5i0T57&E>FpcsF zPTWM<&Q(?@57t{=%FSZQ&(|+85oaN*3jL=3uf3?D)igDd+M6#pS0v-qlnZVU$^c-6 zH;>nQ|6H*1DUGbs#flqPKW8#nXKqiVk<4Q@6``a8BL13x!hgsA!2ihq#Gi4(DMxJh zj0@&=5;~7rX1Ra51+<}A0jj{JnN$;h={j7*F);Yj?N??S!A_bd6Q+?KPg|~6K(0}# zynt>GP`*g}P>~<;_364Fq5f0=S-8KnShz zU`4uw4!s33Ht6sJ0M-AvK&O*Pr51;3Q0g`L0;*pAIH-ED1XXVVs#>ls(wNO($EoYE z=nBfXt&9ro-J=p#e|fSt-Ml+3b=Q}o=bf?jG~DTzh-2lt`|5w&VSdo#5t{Xg5RnQ? z$S}M3AoL?(Y&ttp(;FPNXdvhZU9@OAL&ou?K)X?S-R5Mf^hv;-LB$b*eIt?_7y;sO zqH>$%)(q>W^`qA<(&ek0r^~-lNB=@c+o)r|TnMN9mFrg**<>qg3Zj}?Br;v@nX6TS zL|iJdNA-<-FJBnoMg}!~T2x@O=vvfmIM-{gY%bLV7{vAcz9Cfnv3sKiaa<6=waqlR zT|ubYR#_@bq^f~F09PIodBYtV)(trZSrY5Cf=Wph<`3BDHi*xR`N?ACh-Vs*v}4CZVXZzvd`u zgFxLW#^sPm715H~x#NhVhef!)ve*#iB7|6dmS@-^Je&(^R$%~m93�A_po^xE)Xe z3~EJ9Bq4XD!gD!z6dtQ*9w`IP7o&VH-~ngMVvoBKw9W`isE`Ct`~bRz*GJVO9l0u} zC7@lpO_n|nk6yP^LJ4XYnFzikP#cz5iZ=wH2@l>QIEBoz;LXSy5ZVCc?)DXF`3!~_ z)~3y%6Yvx-XvnvNu>3yd-|=txXZ%zC4gWfK-7sS>GPoL^lHXnO&o22lmpOkBhTr1x z{3$5s*PuABKo&ZsV-3L9PuYfr@>fmctJ^AQoIyMGFVSTF^8QAvg{S!c7g1W~8M)hE z&gCMy`;kCJgzG`XOG$vNTCcpuWl5=r%SG-d6D6DSC{*8A5jNW0D;B%;uEnC;SL~zp zXzPI`cUNsyGkB{2P$T>w09Au_yLdjMpKgCt$v;O@EQ|2~ literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.cli.grid.doctree b/docs/.doctrees/honeybee_radiance_postprocess.cli.grid.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5743b5974f0a9c6df6f0d55e8b47c299d9fc1dd3 GIT binary patch literal 21676 zcmds9eT*H~Rkyv~uV;JLc4AZHIGGUHyB6NJsEVK@anlM@HMrSCX+)(o?RfUhyqy`( zn|YlNuU8Q222$DT6%FyEwL_bhKad(q8>y|x9~2=KA`}4v1QHU6R>~jz0jNbFAr*wg z@7#~M^XAQ)eQ&)5oJd)}xu56jo_p^(=bo$6FaOrld-#8BG3mQrc%^OGb{N@ClCwEG z>SR49O!FK0nNQ`<<;!e7wlQPCsTYMs zcX!&Iac4i4FT3+>I`z`PDOIsmHwvAtb;o(uj4j))K8?k2_ zy~xhcmxjVf`=55M5Qut!J;eZf8V7hG7g){oE#Q#m?h!U`7D&5OY)0a`#`XtZ=;UkJ zy2V;nn#SIGmV!n^lPS+m2>;nmU?m9(@q0S7dg9ldo%Qv{y4AT9J6&p%vDwtxpsL(m zbWgYk-Fw_A_au7`bm%#&aTbP7yt*01mkPqHD7vha$g)i>&`F9W1zl>%(vB0*;NA=S zvUPV4oAyH6xl&?~;GKIPaCYwpMiiPr5555`J}eN!SR>Dx`9iq_W-LdWeV(8iX50)EyUP_g+X9 z#CRS;Xl=w+-!0LcomG)sRPI481e(x6|xW+-UMsk|S z{iu7=eJ^BXuOd5eXbUBwR{6;OgOW0nfL>V5?5WsE(kOP!DE2nI&;QroUN(m=i4$LT zauRM2LhVR({MH?$OSY3@ELX1D=Q;PPtUK8#k&0p4w9;(4+QgI%Whs35|K;*2R*z5%1@vXe50)VpG~Xk{nAC__ z0s258LlN76DmysY&rmPxighld-+gFjxNp%%bV$*^C$RQ*B9oPxB2$%_G0`T>siI7j$jc z%7WCqYz3J!I4`>^$@={$PR*oe#px%qhz`%!Nyxr0z;SjUWDA4a-Y~a{dWF!uE-8@m zTYLBH8I4!Hg!wb*1R{R7km-8v`0r{S{GW!z7wl1k|DYIrKW*y@3Gt!fKixdVe+^90 z%n3R3PMC3AuJ~ewoLizZ#}HEvSKBGHhAT9Rk2a%Ns|5Uq$7Ipt&4bsoNDi)9G_BEf zk2CqDG5BcnBoi@7%)JvP9U3?Q4)JDIRx6ei-x`m!8IO8S^vC4H^UZ_Tb3zVY;sih4 zDjcT8m&V}5=1C^vgqV9LoM`E@_YfPVP^ZA>zcui$H3MHy{@)&x{BJZ5UQd2GxF-LM zxKSts)ThSb&E{z)Vt|-^Ck(i&=E5_?iN#7Ih15{F#_qe#*wu6B@5bcNzcdeC&mlRu z=Fk-Gb_x^zTSNb!%@a(-8!_)rc(Yi!cMkCd7Z`a@Rd|$2G&Xnb+riGhh)(0|?Dsbh zUe60TxaP(55?!nn7V=ADu-ZJyMEnqQkIj$fhU~|CIO};P9U#r(CWB90#Q3@HMV#y8 z9a`PnaP|-;W}Fe)mpx~*13Poh7S&G^CSP~p%)6b*aUQnR)QUHp6xLr;m=3qGb{6(J z7-`Ylvvc=(HiKWV-R11`c;*YT68Ik?-V{g*Yfy=3&st<5g?Sj~`JA=r!W*sou!!e_ zW{4SS%^rJhHq9*>FiNqxZWaXmP6#AgW*T*f7ip6F4gvT4r*jyzsZ?CG?`yo_FQ4JY zj}9z*{GtuqF4DP}UrmI;rxS&+Je9B7%GUM1;;g#%6wG*W)**wJ(e(l+G1ACLUB^&% zJ#Ma2c0FU=N*vpWLf(YV=S2+}v!{3ym+)_ZbGaK3GPFxqr3!-U!L zx`vk;T?_spl7}F&?9y0Pg08W(l~5x-XBux6?YeQ)GuB}ej<;G*N!O4TE#9$^lRFD& zErnMnl|uiM)Z^X@Q-kcAXRWU11h!Dc`f4v#DI9OSx@1^TOStG+H8QoHRCcyRZB*qV zjl(OG;Nah+)+hXz>7SGCS)fAuZUM!5WN!^YiRuIE(0NW;j~{s!=V=o%VZ`nYch|yw zs%&U8R#uEBt<)unE6cNxDl&L41Y{M5PXhWW3O7n4SIlkPDLK*x=l{V(B>H_pqBrml zNP}yo@%GglhBp5AR8zKHpv|#*L^PMGeM);)#ib|o-3k9&eE!jPK-vwzAwYedH}$`X zf7Fg3B~O$7L1_YzI-^8;(kG#_Y0y3;w-8&Z7I6mjzg-%*YB7|guhawqE; z9xh+f{%wv>9qp;6JRI6QplIKOhz6)S!uFi_9*1VvIPq#>t)Uh0^UAG6-b=!u*u6Uu zmRu(_Y%8@4(#CD$ys-8eUShyh3MR#^0mc9RFv1YALC#5R?s_70pgjd0_#9w04w4B? zX9D*0V1(WG6R8e~p0$t152pi})iqnZk@-?LM4m6q?& zu=8wIDw?u}nZ0-sG`@IIY2PV)l}1^r0N0G`DQbPfADa3&Yfr|-5(L%3{L`33t$zma z!SNFK_$qb&**RU2Yr8axFi^r#Mr;?22KP5Z2n#KRyvJ z<+6K*Q?*XTQcY#qomVQh0B8qfDoI~;ib2smcJbm6Nwpv!8LBG{oK|2TYgJaE0Z|_0 z5-=$XwUk$f++NB*!uin*?*!ZZuT?GnB~x zbBfkUIMq}n{L=p-ZA$W5g=BCc%w4SPLHmiUrS7j+5NQ@4xd~P01cmmtOM_PHx0l_Q zIHj8>pFnn>k+Mf3`(Z76B$cE`rOb(QQsPEgU>lIQ#JUX0#hsRdZAkB?j%BxS!YQAS z>JGGp!$k^W@vY_WZziI%l)t~^RH>6cs;S7|6T6M52EIDm_Wb)P`M`8>HUMmAB&ei zfll=o396~^^20w0?>K0hcQrbVBs8G8Z zC%F(WjAS0wRG9bfVdia%kLFEv!0mbS!AW`3IHdnIvSFO?e`gG{!dFC7GS_A6&7i)L$1(mHpX0Ipjwfwn_N`?hw+0%g4zv$f{Ln*}xNjK|CFXIxgx3B)g# zIN|>>4I@DRjRN%d-kxNNn?x!4b}#^#OP`Kmt*IRCuK4>#tVhH~{w+E+S;>@;B5c_I zYu>g5d&PQR0luzwbmXxA?>hni2e$+MjL;)O%rwylijOn(sm1HS^x)BAaG{SN^ej5< zn9wD&d4J^{=IGQNkC!K>M9~JIOgpdCxSkgt1kN;83PnLQS zz*7RUdiM0chJGT9$2ZZ*zlc8rTHd!&GIr#S-$iS8#^0c^2qxd9UoU{4{PWYf@6&io zV{K(RUZ>bqpip1Ouyl0H*8LvF8l>}bDY|2~18U?UXSavdD)KYUVqX)d^A0`sfXmk; zEnsBOe)T&m^hL_codvX(##bhlM*kM|5b-*ieg0>M7O9^P6)pR>N@c7ZeIv zQZww5=s$)|^#V^dRicjrx(28^!uCYJn?utK_yk1%RN+h}x=$3M1DA?ng<)m|EftAm z2xh^N2WOuixnqUo=3BBYypdn(@PE*G2~kT+wTv9|Ms>bI|7NO4cD`>UJE^9^&Z|FK zioAXGrft1__10O$Dc%HK_)kyDiE- zvzcF{+yF@t+sbByvov3G7uVSQhJ%z>JnaEK5NnJmaI4qHum|EON&za~YhB6N-qjp= zUU(KVdVh8a4O;RuivxTeq9;$3YKv+C%Czvbv7=oKgScd;RC$dZqBLb;)-$gl9Hf_D zV+-^Ksc%x`GCC$0@PsIF0*9BFn_lXgD%}_6lO1IKuQhfsc6hdf0B>JF&V8)qTF8tb zKd0Fd=ZXg^rpOAE=+bH1SBMmqn=bN01r8E&%@C+~gT@vGl&se`3y}n2d4UIMjFDf823+JNT-b^G zx~QKxnH`zP5rkHUoh!(?1h>?txX}^TJ+sgw`7*C)|J_@~5!* zu3t*)XtY4^8MxNqB0ynz*Uj9PL4 z&=P5)dSFk=QzJS3l~X_UAn3UecRQ8gsYDNdS`AMR1xREsIdR)_(k`C^3SrevdjTe! z$E#PYB0F{S3v=uwWU_~FWVtvC1Wb{g={h@{Y=x-XN3f=+)uH)cYEIZagt4pSX*n_}C@+{K3 z0Ph+*A~PjIR)en4Y1i456JDl_gKSP{6D(gyBEk{z z36D@F8Tklz=($;8*MEeY(aRZzkYF&u)7ShO_7?xqS)4RavO6qs-$3@eXI+Q;3%EZa zV~5J(%n5v`<6%+Io(rOj64F|#o#14-M6`qOLi~H{QBbT9-t_KDVbOYiV8nSfEAMo4 zV0>&qahgM&9IK8cYj6&LPVGb)={;<^@*NOxz^*#`bF%yfB;$qrDd-10K8B`&pe0xm mV!}eT4iq0Kin&xD@WM`z*|dr_XtlO%(*9CW(h(3*hChqKWX zEM0%W=F!D-152%er7I1*2~||xf+7YR_^$7fHfX-$yLGH%e_e{4g|VAZzfP^yV&W`v z6mzm7QWN7}O(Zo2LVR~}npIzGsVmMG6Pg@pHjO&YuUa~bTY+!$yL^-1<12j6pCS(# z8)=v4OplJ0K57#)X!0^xNXtL$A{^7Iw0U`NT87#n2lo%Jxd~tL9g(MOzEGg5cKlPs z%s)fsKgaI@eh=|`6yrw-QBj$EBS-KZ-JrZrW|g< z+5-ptnQtrmUN8@k%|VQ-#z9~W%+3#94WWh{XoJh>)jGUcse<5-D};YIjJE6fV}HwP znj1+YjS=wBOoNEZuJ2f7sSJlpe!bCQDV8qYx9qnPrz5A3mO(ZfNyQ|7%`j_GG7#-< z%bZiKa?A2G`0meCIy6&Dy=i>gulaROWxMS7T{aiU zqNUcEMycaFDVw+%uG>1MI!6|vp&88}>7g76iy=k-M2?&hmM1EOR`5M%r-LU0Bk+Ci z;wE8QD@{1sM>23%H@ceG;J2&HFIef6R)XKVv~$S>f96E0b0BmqgB;c{{CMusIMx;Ze4H|gYZ&7Cz zIT!hB0$A&(E-OfjM`X1W2tZNiR7Qi_rKCi9Ed9BtFwCWj%(IB59X1CaF|v5Fgh*n^ zD`7;1*KLvtLnkr@QhT}D^a*-y6TujCM%i>Q+OO5fRLJsm@ps}EE-_4(jmh$8Ek(UI zFrT1K)$(xJ@5W{WZ1NdUC`Bf0_;Kf<-zr!^&>{>iiqQg>Y(~k1!uQx0{u6F(VV;gg z5F0SN1q~0Co}ry?N6pd!XcEgZl*ghRYmg5feDyW*xuvJcCG$~oZvKnLJUW*~ydE(< z6wFS`JHQ4bZZnC?dX`SmLaF89aLw-lkQr$^vkiclA|m9>@0gR^(mCOHAIdi(U~o|p z_nRi8=(1lOTG}8{H_LUkBvK``PVHX8@eCy>eAR5oa+yM$K5_-Fh*MrUy44(T2K1;z zzdJdJbM zDX8v(w3^i*hP7$C=te%pmvK`7wqGK(KdiFZeO-l@8F#WZ6?Y^ zQpBU0C@BFi#DG_G^@m#i4iI<~egXwxngf~Op8x~YR~NSIc|p9bh&+)ljg2yk Rm|agJ!Pi_EM;JF5{tfvDZ*>3w literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.cli.merge.doctree b/docs/.doctrees/honeybee_radiance_postprocess.cli.merge.doctree new file mode 100644 index 0000000000000000000000000000000000000000..67c0bd2b432979bf48899e8773f4292bd187a501 GIT binary patch literal 3500 zcmdT`%WfMt6t!bZwrtCfyig!<>Y_;FppleC7eyMhD7rK%AVttsg8?-|iG(@il#f_m zq-YiaVt~7_AJ7lzcl5VRw*@Rm;~2y+dv%q zk_{G6{Oi9(@x8%}K+RD}&0%r+C;|=`n@W2>=L(&5()wHCa9w(hlJIn_#9 zDzo6bKNI0lJgwSxm9vGjVa#^MzBi+g17ej97-R(EV@Y0Mu&I@@2$fFxJox2N@S9Z# z3C=ynf{l9Uw7{ruRhmQ@in9o%6N~mV_^VU6k;>AA$=ALgMO?Z(nNO9@!)w1Cxm_fY zY}jbv@K$A^f|i!#gj<$0Qi${F4Yf9o{g$SM(l!zFIR%_o{01YU9d`U4opYdQiFKw~ z)bX8+PTUN~ZJ!V=fg)CDN^)3wxQ>*@lwy2b0<(n5RApEde9zhG;Ol|m_`ZE{GND>4 zoiJ35pwOyr3^ldE?^MVyc9;GV=K(ZZZ(p3awA1g#1VB8)fR8{z z!S@A`Ge>3=aAz1_!At9}X__jXB^fP18yph_ckH{Vl2haeIC$2ufpz^haaJYgCVz#4 zYyHgSMbh#SsFnr}Dr!kYbhuMmN~XuFKQ|SIx=bbWJhEw*&Y?s!S=?DtB(=$NZg|Dl zoh0LiOhinij&iN36V%)mk};@^vgqKnUoT6hT$HbgzZt)9h@rYHOe&+d4EMc>mIU`y z4Ud-nUMx1yM$W)O!E9+gWXUyrFCa%!jL z8Bl`}v$?=wJxeAiq0F*ywC?vo$UJE)vrQl|MP$gC-!-Swl6k`Tj0yZf-c_L@@3%}& zP-VY5l(Yd**UE7O)gX6vREp!$l8r8 NN_?$`v59e$;Xj5}YxMvC literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.cli.mtxop.doctree b/docs/.doctrees/honeybee_radiance_postprocess.cli.mtxop.doctree new file mode 100644 index 0000000000000000000000000000000000000000..67f8e8eb6f91388c4813655e01110176f43b1075 GIT binary patch literal 3514 zcmdT{%WfMt6!lB8Wm~eH7YZa!6$EJ%Be1~7>+x!M!<@@fp z5tk_&DVt?XjgF-{f}w`1dFOvtraZunms7jpG96Q_j3I5dLKxh9>@S$!*qaSd5_!=PkQlWL1z9(g?_Q zZ7GGsZD?i;ZVO7g*GT77$;_}U_OAUiO)N^O(cZSSCb!0q`OesNW(?v$jZ_|km_mvS zO>+#kl#~XcvZw1CdIf+0|Y}9agy|l1|6&4bRN@`)mdDVtWDaUSGv0N%c684e- z&K0-GY0?Z^Zja3cP&Cw7T`y|6R?H@LhU0q2RAoRBD-@$CEFD}n6TK9K=4!m>!l zSmj;En(5%1ffo3_aek68rKBPpb(SzFS386n8Si#VgX(&nG~cU>=MIYEgqlqh5qhinJS zgd+A(7w!vgOs*e|MlfrLx`A#DrJA9fu7;IG09Z*3OL090*RcWn;Ld}Gz_X{O(FOOx za_0W4+C3^4(v7QTYABeQ7H2>WM%<(c4(k{?K?%i%`@;>l4??D-smvw;qVvFzQ@5*6 zGDGKtiy2Sw19{gH8F;^~Q;I74)uN;|fVy0a%OOc*L@Q|bBaR0s!o`=x29yg3vHQs8 zI3l!pMekN=z$w@xBauzPfl3rE1(ncta$%WB19uaNM=L}W8mc1?%A^w(qkK;g0cXtM zjH?k=9TApNkq|VbL3E3#_o|i>Tur8>pq;u^mc0y(ncFC(1hoq$qIVIf4MPl7GX`lw zf3k<5z$}9{6>=VjHtZFo?wqx3)nJCVX)|aCJw=xX`+6{z-~2g$s$C}-%t?+2UwQug zRP$S*L3)aY?lE5Ub{Rk;xXtzWtN%|h#?@dEm{;W7CeJ>mbZn^|lDtm`gv zwm`8P2{1og1CT8(L7M7y<#jDu%5}Iza6FyJq$z`9>6Ht{W_9PB$4-4}vFXw||9E1Q z@z9K`7kyPTcV#FjGYYs0j`H}a{vGU literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.cli.postprocess.doctree b/docs/.doctrees/honeybee_radiance_postprocess.cli.postprocess.doctree new file mode 100644 index 0000000000000000000000000000000000000000..233f75b071377369bdd474e41972b8726b20b950 GIT binary patch literal 3578 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 PrBUi@RgBGy8xQ^lW?OSR literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.cli.two_phase.doctree b/docs/.doctrees/honeybee_radiance_postprocess.cli.two_phase.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5ce0f5a018b11d834a0a46e9e9a868d9004cdb81 GIT binary patch literal 3580 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 ZRZC6JAf}GjCJUZ3DIz4!Q>Ds{{{aHBUqt`_ literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.cli.viewfactor.doctree b/docs/.doctrees/honeybee_radiance_postprocess.cli.viewfactor.doctree new file mode 100644 index 0000000000000000000000000000000000000000..27055e4f22009e28d529cec47989c407e74328fd GIT binary patch literal 3555 zcmdT{U27aS6!q7xy|#C4=Ziw()S;wtXm+=d6iOOeN*+xYQbL~^gmy-|64s2SlEz*? z1R6>p2E9f7E&U1o3;j7gny+1(CQYC(H7ty-q^qlQ&po>Swe|a7-KFBs?U;;1r;u7pvRIVfD-4a$rT*z3n)W7hq7nWNg&7j)9Zdhc6 zN}KJx#oK)Sg+JsS*RsM&wlL+s;woilW5#|an#O{r5xz2IY^GJjj2T2y3{C_)ozTcC zeUPX)hlk)0{??weSqOCQW~p(r^Z{;O`|^hEjN(4l^F7xg4FG)AwX1uN+?o_A^P_xB z-6pkGi*as&SHNdg#3o>|9!Y8pjQDP)G%3F};yjxV#xy$CY!cSwZr##pnDTsw-{jl; z7GLH2?zbUV2^;D>O_?5^Dt!z?2~xktsJ{Twzs%w~rdiUU^B!;p+5m~$M=SZ5FS(XT zV>VkzS(#1#DQ?d1APb-2cNf2V_}vdE07xy0yC1r>j0)}DqcUyZ9Ml*2kT|@1SZ?co z)Gpp0SxU$#^g0sUpX9wBYlQm=l3)@(TBPu#;A!+#`o9~k!M81}2WXEojC+dqU#wQSIur6IyiM7CO9 zh(9R#{_ZO^O28kuYgW_LNE&30K&Pe}LRBb1%PLEyKU#8|^%@pqn1}P0T`$UY&>7OG z%64rj)x~WXW-Vv}A>M10b)r>jSsHuS{)x&QrPWAtTjdrx_anYDa-AuIVo=DW#~`NA zCrgtIgDtI;MW}2dX5K9iz1u27AUO9J3pT4^t|dlYt0EGVD$F93Rw(H+@2*VXCRLU# zOulj5p!jK?kl94(#J_R9K=q7(j^Q0KaCoz{Fv$uFITeA zP8i@^ahsgVX4rCjY$kxBr8YP9qLypLY@APVT7WGnZWOSFTq& zod-~Fy>)To(oVMg4tyjoilT$lZnca|ge=|~ zcO!h^5W{p)m@Ez6V&r=Z{R{F`4v&`IUMM!uCY^$XQY6CqA9nA#UdA$l5@9G&v>rHQ zJ6OgPv4^^FpKxn4^LRLf*+A7T6l|dM6ya{*$qz>ssd zYtB+jXM~F>m-vCaYf=T?Z<~ao%6`dF(gr|XEym@LNEOiv+Wm;*@rjW5verD z=NXO&U0~7LRT^*(_NYjt6L6psg)2cNOg_G}OeBH3Qla+?5rr=6*n=|3n8hgHGep1{ zvpC~=gjL6cB~(a)el>`05%pfxae}LIQVQC+TV?4<=+@juDJ7^~FcH0sKy6rJsh%=O z6Z(}s1O;YUbg_{0IP_*OA$1q5W&Z{!C=oaMEKJ4 z=jVps2@TUTba_wknzzdU8X>QnGj2tYlLV#nNk+jLquK1&^Kj)MC?>3;yxg zXzQUK*Dw33X7J`iLL-$2fy4tFDJelU+yO7>`qRq(7Ib*+e}o*MpM$XAp9F&nC=YCu h^n!V-F&8A>5@{s!I26q^@OLu~VqfWEXlL^A;BW9ogL41? literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.cli.well.doctree b/docs/.doctrees/honeybee_radiance_postprocess.cli.well.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a8461621ddb4db28075b5277339f7b754380aae5 GIT binary patch literal 3487 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 U)VEeiJU*pEROY@} zx9(2&2SGn1Y(st98$?7zMMV4ofq>vI@EeTa`bEBqkA#d(88~$m2<-H@wJA10JgEN%qRGvR`D!x-Hpx5~b4R znQlPCCEDufn7L>^_nk2p7qlK)0<2wDF&%ROiT<`g_oH9uDd=<5(x3T8L}Y%wc(}l>|+3z zB_A4{RIe*GGD8`4=r(QB9a^OWtxhNk_=!xzkjseR|OZj6RPj(OsO; z7x90D|9kj<1reav?9RKnI^Bm8O*qj8j-nur($K5nA%_Yz5VpuwlGm|Pj6H85x~&h& z7+x3x93IYJ3VUS7eSLSScF*-i_Fi_WnlWe8zOdYy&$(yyj+X05o}|9IlF4)K`!LD% zwg_E6_4rWu`QGR|^frB;en>y!dLv+CkH?C#(>0)%#g?4F`pAz4*;KbkcpkVs)jNfm zO0W^8!GKFRe%jERmbyt4`V;7GA|=d%Y0mgfIjflg}5cK-vsP~$V*N9Y@)fP>!KOx$Da-KX$|!I z0R1;gq7_*F*24Gmu}yvYHgafRzqA}bEDTd-VA0q2ucGO(i7!T^?2O)3W(Zj(C_AT0 z;1_bP=P|_`HHo=Zz6AW<1esE}R`s>zzHlF9MhcL$bp8_CJp9t@55D}mwS7qpiTehk zCWe<74Y=_kXX_DTld`YrvAeoud(KhdA*FZ5UX8>fe-YxL7TIaB)Cl-QI8rwwwa$V7j7r-Bg;M-KjeC?NX9=>UtyLN&!T;xa?Oqk)gCq_cGo30rOMT^y(_p zic%G)D(h3HuiGPz?whGdBGb2#7d<@=UcPdRvrKWCr ze2|W?-0nG(A)*Kkl&JucHjd2YW=qCD5h7*|58cRvR;Jsj8g{?hO$2`5nICkxl#z6Z zg`SUc2N;+NsWRQkBVV)9v{o{GurRV<;+VCAcKu;%+vxZ6pH*-wieN=SZnIdE?{+ z;sj}5AzAk#IRc|@8cpi}G#$kQ9FM|rY(U;Udhiv*b5{=C1@lHSGyigF-gGqvvS(cO z1Xn}51`@&vsldl#ZN&y)k!P+!8~Om444jIb)drjdnUdprvzJUl#m4BuMwEA$cpHce z^tY3MfoMNZ!RiEox?#WbPsfj3mS4g2flDY>E{-qf8=`DOh}mapj3vy&iM>)4X#n>x zNJKaU28z6J-6RUMMhj{pFxd4YJeL@c%%jCw2FT#9=7GTzctD&htZ~zY)|tZtCVU4^ zJSOj2ulI{b8er8Q<~ePuS9$ozJbvhnJez>NKq49$0d6QqF*)MMPI&m(hf_e7Lhp%; zj*F+s=KA`aG=C0(7}kc>N6VyCyre+BZiM;oWBQanAxRN^NFUJ0^iitYX4G`TwouTg zQ<78qa7rIfQ@U%O8a}~WN`xEZ2b9uBXlI_HL1^VZR_VTc;ixW>^t390WpPETmY^tS zk5O{oiIHmXI`jY06xF+oRPWT`Yy-UG3XsB_5Q3gdOx7y(@{_Dfay^_c;2#Vkzha10 zePKaZX}9Mrw#!xRr0a9`QGle%kWOwc+A2oy%z&Kg;!z01LD6+1-`w-C2UOMdHw*a_ zz~|lUyT}h{2$5;<2$z5o`GQqyofB_WVvFjn;;92H8W})udM5i9iPE$<>7e&t`2bXr literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.dynamic.doctree b/docs/.doctrees/honeybee_radiance_postprocess.dynamic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..daeabc043658b2620445ac8bbccbcaa08430c5e3 GIT binary patch literal 54807 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 PB@;FBO~Qjlk literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.electriclight.doctree b/docs/.doctrees/honeybee_radiance_postprocess.electriclight.doctree new file mode 100644 index 0000000000000000000000000000000000000000..166452a95c23436d5c87fc4fb7651ed2a75e3ff1 GIT binary patch literal 10554 zcmds7ON=B(5uMrD?wOwN&f2@eve&c)W@qH>9%OtlW6Ky>a9J23gSgmBsk$n=vwG@B zRn~kY+t?T*kCXy|3jq?p11BF07fu|2Gk*k}IUrv^+>t=yMP~i_SM$NFWLBD0=Pxoc z;zdMOM84ek#?JPf`X@KykURcS*R*XvuvwhSB|ESZkNF~fBi()_eKFmVt;jr#gCw$8 zD(5i6;*M)a%uny6a-F6N$Bnz$`o)-8!U_ChIdAYLU%ZoU@s?}|N4TsqBp>5}&yIVH zJ#R#&?U=rWUtti7FbXUd$6e-vUgTJ=GvK1_1$F`gL=WUHe})|qpCy&Kg38?KR9;K< z`I@1L(}!xD?j=1_E}H`U^b!GSk#rUuJ0?jiTCN$#=)~`a zZ+iOIlAVNQqi0(C5$n^OL@o+*Ktn0t;P>-Y{s3R#H{=(0c;K;}DDiz3?HmTtK036B zI=O^86#<X@I(Q%c9>(8I z{B4sEAjim2N8gf{L(_>;`5~>eC))Wr&cH@0AJwZm=UK#?dm=Rx{s`|>B>IzgR-&~G z?To;+8y@eH0w5B9&<^_Nk^p}Ya0AF&K&Lr~%#c^~AV2l-#8-9}xBEfVCO~vDlcBwA z^H>{9kcco5aoh1l(9W4_t1+4vTbz+a#a(Sv*Z&8EGc$umKB_Ukr;cXML=h?QBm4$` z3OJn46$x2%wLi)o%FOknC~U?!D13(ev>8R_u^|G(c03QAMn5u@47ax1TaKSOm-8rT zJCz@+#lxuk>dxdKoetgKzAK?ycT5H9Ie8he#;V{s4-s<+C>Swf2d+^h(MYWL>P+!% zsgd3GOMc>o$6eo6?OW|QF+#X&7Wo(x$03y7{e%;X=U@(ZFw8_KcH4b7FvYF52d{Wo zX}N=PEa>+QFB{u#cbls6ty%tLpJjn+b<63B_6}iN-Rw>=@&z7#7_fxZqa}wisA;xbj z(cP;=M_YyzSQB&X4lCz(^Ih?)-0{bCJBE`xzE$j4I66byT18Rw?P9NXWv^eMxmcAn?suyp^KFWRN4S+%G?QKPu9pkS6aRTO7gh1%tAX|Hz%v~`m6yU} z+zrtI9}KV3P_8FcQ-m1}m`LT?i0e+}3f+@KW;uPwN>6YLI^NAL|MHP@cvW&?$GdvJ zJyQ7}A(Y?Y9zS|}cykss*yy~{|5^d&LeLwI!g8f@Yp4Sy|JxLx4R3;_QB^#bt9t&q z3hPhTvp!W7Iq^xsEZ}xiA--2n{0ws8Z;zO&qF-a6XO#uM8R(4Zm(cueNGzy-nA!zuOdg9XsmJvVI zl)qC?e5xtuoR`+zP*-d%o=LoBqougss^7GtuUVEnhS+R}b7S^RrGm4>itNl6LRR&| zV-i_vv_O__m7@AXy{M)m>o@9Hr$>mt)DxeMtc>`n$ofY;@#)CQh+i04bC+sk-rYmi zzmy8jge-mL3nHuhh@FNkj8>3EtrA)9uNT#HWVNyAEI#Yedg9ZOl@UJ`Sx?s!pN_1I z_=S=6Z2hKp4_SLk1!qE*KJ$f;RZWOYB1?@H$kMG6SqJr^nvSeU9qV+T^`&~^(~*@C zKNVSDuO~hoSsC#QBkPCto8CQS{XnVUOvut_J~OiFC(8T0#1)P~H5lacvg`($xc;Be zH{I9p`Hk2T?^zr&W6B^FIG}f6UOI=BHGeMvEgz z1Av5Mr~Fmf#4i*|((`@VL-oVIj~rK57Ak0Z-lP&0igd{Aq;i?^Yxu-NMKK-Cc{VSU zTi|c=rd;YLuB-A?ILI=}3l?Ei#ObiH09CyDWqeSoUY*#xe`X$WYg;8*ZB#x~N)K8z z>H8edz&T)k8`)i$ zR=e-Gtf&C}7Zggfxk6`G70t6&dp@VDJ;SwZSYzxE4{14 z6Evi2W#dZE(o@5mASD+843(Z5Zc$SuV5@CE=;&(b39@2A{&PL=?oj3P7@4ZoY%p(c zVn(L7xR|uz2YFvUk0{Z8_>vSz$!X7KC>c_9c=Ci>{7Ly}o(h{<8}8%=eOj&A~OBhRasU8b;|*OsLSaM z5eU;wZ_ml)d=9hGOlZG(xo#y973+j1zmuvKB0try#2*q44eO<0o%{Vlyz@w)a zF$mtTd!SL(V;nky8~Kw1?3XRb-XQGB)rf^bBn+1wFo^S#T;`@*G#hf09XXJqK$R`d zCpBclX1!#9?bZ*?$fwLO=rYqoPYdd>7#)fDb9^`%gZYRf1XkHfM8ETRN4ePtMh6WR zML}e6)3;rQ_W(^|6&_e_XvtToG!&Io-WVGhBQfM;q3fD%$wR*Sfzg4n#qtWB0oaQ< zMC7V6*P3hkgTx##NSxy0B|L7C_e9JJBHOSTWy!G(y=&N$O&D$;(F784>>Ln?1M6mj z(sJ1)FCn&}(uRtpQ9u%cRUOFCp(ts(L~uj(D6o_E%dRkHi5(ay$6?kLc7!57GpZ{U zN-SX00f(@|h38_kmN0v;B3tnE_L95-OnOFPoW%jM;>?M>5+D1*JTf@m zAt`s7;vN|g^jBjK@!t4+0;`T8sC!gfHw`zi%uKX5ERMUY1;uN7gOrsBv3frV5jp5B zm3knRxq%a)C$Jp94-8~};VL%GlZ%>9x{+3dndpX2XJy!2xHevYg0k z7G~`m40RdTK*gH;uHt$#d$$Fwx_#}_PUHgf59rmCT+-eI<_jbu_BpT(Vd(px!p$a_ z0bgjd3B_hEX_iks4LQi4hdj*Xcg-7WTsXt9R{dp^>LD z&+~pF*Q#(<0$#Hm7zJqvLf1XyweopdlhqzQ4-dNlf3Fv~g@vf8_l|WIvs)t+TlubP z(bW<92tbiY;ZClN)5=D04}ed#f`mLKg02;~^db;vKvZ3PChLC#$apP%7XATuZ+IF2 oErvgnmJnYo;e%t<%fU0wC+)qAgAy?XCeJwN}2FMMK#|6^-u*Yl&jhSO?Aam!6} zcAynEdmT5*@>lZHzm|V0-(X9Lb0v*?Nz={Q3~DqzKWrs#ls}uZRjQu(VcL-G7gM*H z`EgV<_vXC?Z}HiD!&_qWnV*Gj=@V;sapd-QT=$}#I4$3ant1BQY1U2Rrkkb>H~Ps3 z?!E5;s}r|+XiAU(X#Z309$~24&lK%vOzmIH#h4bl4n~mW-a1>diy?b+Y(b86o9z$% z$j!HVI}TfRvMlj;dKoB06q)l|DUE)y89Hf-LOjn$PDeZ)X!W}KWyfh=O58Tp>9NJk z*`-gpx8@!5R=nH2Iqx{Tde)0O?%AXlMQ(ETN}OCmfgsDKqRM88C}X~2IB8L(AWI!p z8c7NgoVc*Bx8u#Qc|U5odnN7&#(8&O$ljfx`;X)QN&G*B|EFpApkU(jL2t1AUB^#y zwka6(GnN{G5rLeY5%o7GtL`mqXSvh!?(sHD^n3Nj($9#>St*c>Zhwmi4FW{FR@|O& zyxs{26a;t)^5^U(PS-2Zo1OYtFXFQ&wc2rFJ+^HL;V0g2${B&~8e$sUGI@O|_Mq80 zA#>Xt5oaWCiNqiAj(d+lI%XBAfq6sd1U0EgwjY#@g%nt0_OkPmdUh7uZ9jC=jnmeK zAIaH084XY8?0zGQl+I9pi_Y>|@e!ne{O^YXY?j!e^wtct9KP78kGY%mk^u!~4~@u4 z5~sgqJs0&l-F_o#@%J-U$AzdgQ@b69EjPjUu9JD8zteaEf6rLEiQlsQs2y)vEx(za zwl*KJLZ7B5*PSzLh2ubqn)HWK&fYw`YcgUenVGb@7MV+(xlgj;FXp>^Z{nxt-W+09APd`OrpmEmjeo5@@wUzjXhl`e5+RXKIIDl3X7 z!yh#DpEpte08w9%{s473Om**9y{kmx=QN4EPtm02cpl++k}iUHx(OG!l4w14Lu9!S zVKI%0-pWF}DtnUCrD(zhie{c&CFVSDp(rTdG}*p7nrv(~%AK-g5`Df5`h1Dg+%0S(E7ast$NuFmS<;X43J+Nq6`TyLH<(>xmHqx+su$(AA(GxN{}^?_7|k{{!VpQ zh^6>g5Gc6Y++T@zWwG?Wqh->2dq5gj%ImaA7`=b55wqYf;4`75Vbs?nX=@eJVMxf9 ziV8};N+p_d+h)quN>}hWAKrKYyJ!YpD_{!vSQ!hg%us8rB#MD+tSvpo8$bWCjP58ocO$hsfqvFb;K{RUak(oZxOyjh*I1eHKAvKz2Em~-m&0qIcP9iv$6k_=fnLX9WmCf3!j_= z$DegSHsq;AWKqh;dhWhd#AgD7+_yCJ!W z61N$5;9qU=ZG{Ejhw}0iy#7DLKnuk8rWJ_bKdHru3;PENyTq2;z8kj0(x7)X%DDok zF#kTJ=Ez?xn^w1e%TK5cYpN`oa*-ay`o1ZoI#{FH$AT65bKEc|{P75^e;#GsY@kc3Rxl(HC_6Ijw7Lhr!;$8-gEp@GR#lz$-Yhvq)ABNVB z%XKvLzm>&}<)<*Kg>o)FHxm~cqGkDQ%g?M<3}q3;ndR<*?~-}JeI@Kzb$`dB8n+A; zYx+G)Bb`(|2aD>MP*B#5}~HzsadGz30G~;dB=w~Aj7Ln z@Ex*Oq^V!uVncW;IHCB(S zs(6!PseQONSL8?azK$Al`;iuv)}mOIsd@y7`b*s`gT*O!;h*FpOp#_ulIsiLdC#!N z%DX1MH@Uvh-2)SOYzIOsyfZ2{Gg7j4Lu~A9 zW%4)9@r~YjxdXsNZF(+cDQxkXjQ5N-4hZ#`!MFM_aQ$ZEy!iVG3B`KY+C~u;MSro`{w&IASk6)MA|-GPWnV{Uj#q{}IFn^{?HWeBio0eMtBQBcpht}i^6I_k51|n@SYyL8 z+h*YP-g60jtoQt)8F;<-Tmsi5Iw~}2Eg^^9>2s*9!jU<@H^&yrf2AR^AbAQ z3O#-FPSCYte46HRrD|!QYIQ@XICv1`!MxY{Xm!wZ7*aq7)ORH^xwh!(%S$88Ayc1|N$%1#U8F;<4N#J9p?GZEZdTEou zwY05O2q`EvtR#o(X%aqRMr3*!{3)}R9I?@uUM+r{vvDG!os=nonHEN-%&_$$XDjYf zxMm=1%4Q!{VvHwE{$DY6$!6oBJgQ)inj8xz9n>{r51w&QOKic9cnZ1>ny~$}BUFPC zFM2$`Y3z-1GusXVjP_+G?74$uLoB-2?Z!!FryYb&f4LV^syhYpgD;kce4WbYR&un~ zY+?CGHcF{JE9Hu6oP&jWynkRE?+6X_4K$iW1O2%fc)bRaz{hH!H_X86V86+UKat*;l$8H%9+`=hK_6|4UGNAcu{3X5=7JXiqME{{ zw8W%CxYgLj2rVIi2VW`=VGdp)HEH;>o+~GfeFR^x4r9DR5C~kSLO5n{T@5LPWnEc~ zu3V%C`G|3lBNW0G8cm`QK5hnHuMi~gu?pcCGw^yTmcXw|A%x}*-z$aSapF&;5GEz% zOXiW8NI8*0$c^xg3SrVAe9hR!2!$Yk4=RME!XK&LYp5N_I=kS7V^wuO^7#)gcz06{_Z6YzYcs%5w*bt!x41(%MxAQ ziwwfx47RjI5@GNybWe7q$Pg^ySdGyIN6=2>2?qawM!`SgXTYf){1Zwh%}S)yz~I{i zhwushnV#MOJ^AZPdGHp&x@pK8uaf}_XE_Z1qX0pnwBAneU9?kTrjnQ*RR!$vaY=wk z_)^JzgXw=A$^~;Mrc+7%yOAKZsP9`a*)?TR2lMDC;QK!g13vyxPH-&vnrB;-(jz^H z7IOcbYGM!~@{Y*qRG~jgwVQye(!2$x%N+P9*j?alG zXVA&Ch;os}^5isFs-(IPQX^AlL~ybOX=6&)2NcVYLh+=C&&afh+GL#~W}|XGWb=|k z;L)i@CKGiYLL-P%O_CgaDW{O2&RP{wP1b7d(F>xOkjH|b<~>)8r;_DHT34pX-OsC< zQ{?uPk69+iNs%u~=|u8_58Qt*PU-d%o~A+xu6@@@EC-W@$GnlevdrBJX~W`qv?(fw zEy|&DtYY#A019v|x3qs-vP&0elKB+^n@J)0<#JNg@r%Ax_!S~6?!BXf9$6KY@xrjf zhh?U~6vFUK*%2eMEG)uVMXc-;(Yn%R$a0Ne2J2tWqfD>2St~&Q|}W#eZfwh z+ejH_;!DFiFMNb4ahZILwcJv{0Ldrysz>_G3P~s8&>xND5Phj|==3>$OkN~sng^iK zs=^u1fIqyk4EUt>WJo0&cX@(o2!kR-&go^B=l)?GOSC0OylBSVzOqq}6_1+}3SMnl z(ul3)RoPP_`Bg5`#QAQ8$P@AGUq|?(D7>QtKE%f?VHoG)(BGNwca-Y zRG9-wCeegBkazH^<88Pik5zKIc-MqFwm8TaGn-{z>uuD?WWANFX#^S*5^maBljJHZ zt+K1RgQ`)w>Zp1eqlIbTOqP-40u5~{E||qYW}>QnhDy6MHxiks#U``9 zkvSPPcn9Wl@bef<@IUnQG(G*Gc={opt_3r5^gGLc_wnC3{=1+5&eJd1mP1LS8v70J zA$CRu8Efw*LW(NCvqs(ngp^sCdaK(RZv;{oJvr)@A;M@GdAf5#oA7fvxUXom+!j|j zd1u(sEODZgG;18$FhO=9jp7QY`7F+yFuyRvmQ@|Mh1VYSH_KL=y@XDB*~N8GE2>0X z3&jq|L|fdMwN4jE@k_AUIF^HhBCVV)JWWwHea4k7h{GoNwzsy;mgKQA#3}KDvtTY3 z;7%7W2a`C?fGQ4S?&WOuEP}HF1v+Yb2^E&*YcC1$c8E?p(iKzm6{yUMbYOO*4KO%_ z;+8(X%ns4zT)17q-lH=P`O9n-v(WF_;z$}!Om4GdqQnhd98$|t`--1=wz}pD{mBOM z-m7i4lDIr>$Pc*X7xuAb&q0h)zRt6CoPq%rkqO&Nb?JP|-RbS3yVWaB64A92fa^LP zlq`WAO_zp5`1uhI=-`eWoQ=0j#%`h`fl145xpV~wx}h7jw%Gy_yxTY}3yR=oASnI$+r?KXrCO8i>SlQB4(0yA=#3MHV`rcc^|yRugwV(QRqBkPU-Qa0d{do47v+ z&{|;mLEJV6R*BaOvuvH_8zd*%g&>B0$ItSgJA8_*cHORxSwiPAaZwyP!3`!|NIP(+ zsljgZvaFkKojr@<6t{I{P+N^S*~N^ynQC$bP}9b_Jg_I@mlC<%&6D?j81!6C+RX}h zD$(HYQs6Op9TM3~IIZiuS)2C(g>cr(Iw3k+%A6g{q84udxNv|ShfH>mv@IuRF#vh< z%Qbd5?MIojXL~qQ$`6+2I2%uA{n!c*&D%0I|1u(UI#h3manpfONTfa9^l&_~3HFKk z1}bwBqV}a;7bgtp&OUw-pHu_aAU$!D&OH@+;Rq=T7^{_Peurc?jB!&RVMI6NUCJRc zogKG@8Qcd3o{KA7uCbe&sCCJ9ap_BFKPg+HVt#}ImH3BisdpzXzvJI=hT~&H`)u;Xt_hFYksJK}# z#liOcWwJZ|7Jb2+`o6leZr}>Ii=N9}_1u-;V~5JZ%*lJG>0?R|e?W3kLOM&;6MQU} zhtV@l z#yHX|ZsLQud{mad0=alGe-hdO_X|MJK+IB12+?7oSORo}ha@7vqEz1&@F&gYB?w&(2I-5@y-)@Pil{*9{|=CAnB~ zBPScMFwI}gul#EMp}Z@WWBXPTWwFC@F@qWo_X0O&Vg9~ctWovU3zE&E{bItL)QiHh zIiKeXeDQsGmoJO?)Jp?a`y@7a6tevuV^3SL?Rs|T;At2o=`fBQmL!{;1w$5h29cYg zB@qIhxu@73F<3R9DVxt2ntwP~5-kjE@So;A4BXzUTyYlAsXJ^PxRZPfKn#tX_Jyb0cPbs*{Pu)ZV2}IX}ZM@l}2g zKglnP4{Y&hz_#Kn3|YK&D~fNRKq+NI>tv&*l0&{ioTRK$YGr~_Hsb^uxcA8uS&z?% zc`tO?UTtX9sPWf9VtyaA{(AhsAO9c3|0^Ut6c~F_=B}6<+FqQCt7@1Y?Pvi^{paFg zRlT$UV{N{$lje5DALbi1<^A5BRi2UWEoF4-w5=?g)rf2WQ z_K??fE!N+r%)Fn4a`q&f%G57T`chaiv~XRS(2gW-PaP{#+T;8(|4EGYtX3Yl*;Er; z&(NvuN5^_0f!vsj;_=>t>(_VzjW*_j4wF zFOj~LvX`i4lj<30X<*<%TFmYQKTc$n>!eRXPm{fVisTjPCwz3A)Hdhrl* zrJ@O)hAeckKv;X&_SA-@*iKw5YFDzpJiY(AVzCQleK#7|UYLs$!+mT(P>}8qfgnfSNl>-Ft@_!aLH;(>@aNba zjxL&Cm}U%Yv|eo^rRV7qm9D>M(Dh{2{~H|r zLCMi%bM;qdXJ!nPzcQv2vR9(~Qbl>9ar$?eDgW6RWwK79Tqy?|dD`dF!Qn4;ca<^9 zkEMeAhs^!ehOKUo{JWJg@>fR8Q1xywKmN}XEX#iYe6%#KR(gDkS+41NoDu6KhDA7t z*=ZElX0@1oOj{hDDm^}B>`%-_W4PkKhnloB3&%*FPZwudEO?ZH z_1|U%(gGi<&6mxhnY8J@7i~4bPQ!)o8tMBMJ~tt~0EX5g{JXJ>$=Fa3_v5+PLC!@f5G-`ta515Hh zMuCF(p?3R-nfPS8Er?era1w`gg_Gku1^KN~)mzOS9vuTD{Uh%aeo8986$G?Z<@?Q& znN-;d0zxBwBLuV+;e*C5ra*uqJ_-SAqkbE`hBk{Uv-ovm&&PoU#ny3P;cj^7W00^?Rn&k`FRI{R(02W_=^(=3`vo2}sB*NpUyaL`tSj~ly~vTsnt zNB0eLbYr8Zje4nU;B&@ajspjZh1PIjt|;yvz@On+w!c}eF(#K1lnXl34lme=Y#hSvNw&@}qF#vGt=VFC!VWOUokcWKql562;-evv@ zUl2?EEC|&3?0KfTfBO&1^Ffa?+bA;D9d7{@3FvD^Qv-27V`q3GV*iH)vCTw6iv}mT0zxP zth`&_<|P_>>P3~-zjqX^`~OR|FZusPe=hT@xIv_qyX2x5x%*>W;`6BvOtmlhcjFHTfla(@NK$ zoT_X3($Mt}x8S-`c9X#2%6{?AD*I8=r&V~FB*eI`SE${|k~A84zs%fXbCGn?sN?9} z$VBarI;aZ787-`&|I>#0T8+j_Q%8foG)Cj$>qii$VysE&@L~DmJ3B0Sb<(Fnd3zri zpOW_J5YzF}&MhwpIzbfOkek3_;RQx@Y?Pz%hFYVO6%?hM>1EmrhgrJW`RO2$RK^In zUW|Qnuuqh#W*|b%#9OOdf7V zuN>8kj3oUtq@_##Y743>sw!7wOGc#flhd~*W?0@Uu$$%+vTn<5U+0%>dJz8;I59X^~**rgJX*|r)BMG zvc4C_QAdRV zDmC^>RZMapboocPn5agC#Mad4+eAh&^cy8Z>tj};mZVyI-n^`$mZHiZTrb7hP}Qk; z-ZSz%#a*7F(O5WG?WCve12KgDP}Z%nS&#UU23zqu_UWQJ#1%)0itCRZhih?UuBWdB zB%%LRfVFl(P98x2>!_l~@cZCn^j*kUx*7d%p!dp&SYxrd6#4H!JLO9B{{oHtZ{cUe zR{fVz($a59-b4Sdhzzmg|1~{*jh^WBh1~xeB6Y4g!z!0yIRjum??e-VrmW}x9h$Y& zB?+yT(vpB)Y(~e_yqfxt5ZB+JpEuIaH|gic%BLU4(}Djc`TG;{cU%5GDu1uZ-^b{e zJS1bQUd2e4UlR}OMQCD<)rLy-*?`U{?TqQ{r>dDLS4n59**aN@_*sEV_M`%R=|w}@ z)hO(bL_6z5G=5c_Ph&ew;FHAx)k0d_E_UE55p6z=Qai|>oDnO!4s-FEQGc^y&B`d#h_V#B^L&S&*%8aT z3<+y8AQUeye8x#?4~F>;Zlj_o1*>qw@8x243*py_1-ewYfeI_dYZeE1J58Q$N|d9o zU}awIX2iKZ$b<-*tbM#KPE&$mm<_Bw@{#1X#TsQ|4J{`cP}*Vwf|pbY3z#gi$YE&d zWIgm(G$^w7cEoDTWSC~aZZfFzgjnG=LOP4rd9lv+JZLdR=1@|V&bzFa?V`K2TXq~$ z$UEpVdw`N<42Q!=B;rq=Xe<`uQiS$oVmV9u8*kc>HwgEPezaH|N3q52&K2Gq zTrP++O7k@;^O8y~E;qh3NcblgF!|RM-HHd@`kv7bjmF|E$pG6+I8+qKl%3Oo9qwlK zE`!GDlIH{xLB(rul#625av6pHqZ>*L+z|`dpZ0N40*&D0Ul;^#I@atgjjXCjoWOkz zVrjF%&?-$5ij@T(tTBdbh6tXKCDPbw^sAy_!ZJ6qkXnRVXW1U|B^i>ks+Q799K`8* ziAOQapk=vUV)p_Pq~LNxp%Wx9$+-!?5vaKs z@>9r|#Zal&CuhaFyi9{*X%~hVcmprZfA;KyVr|HV7G?>4i+q|Vm&9e*+vTv|xqy7~VpT>$TSX}JZQL7HkwWH@DDVqc>}WDAVRh=afEmpKoU%5&|^quO!vV7 zXUHHq5EmTOx?wTooCFr~?Fe_l-fgj7^o1qjh$r0~ zmb%Q8cC!wqU|A{P7Kn}jazb-)Zlsj_lCl`o`sEAVXHxPpsxMNZdiKAAHP8PxeiE@v z#qtD*O7g=&!tX;4ul$Z9;5A&mEEG4Z)#Xuht8`87O-5Fvc`w0gnBS(Q{_VgNWG=so zl5a=yUZ3VnZouRQEfc5frYx0v+VL#0$!m#BKkiiYVAdQni$4q5el zqp+;KJVJ3<_bMBm8=;TICr)!f$%Q7Z;tTcwz*8s62=lPuIuWklR4y@$<%y#FMOej$ y^Y;K7aI*}QfsrMc4ywZvR!53YmBrGcPkEseWG>C1T}pgkaS8bgkW?GT&Ho2qNp?E` literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.ies.doctree b/docs/.doctrees/honeybee_radiance_postprocess.ies.doctree new file mode 100644 index 0000000000000000000000000000000000000000..51900464649819fd3262ebadd486d52f49ab9d3d GIT binary patch literal 4342 zcmdT{-D)F87M91BY{|A{Pck7eb|*8kui{LBB-pSixK7e?heV%~M25pf}7%~JoBcf+7= zg*20D{jOn=6)J6(^Dgi4-LL!^@4K!QRUCtT%8__ftG>!0;DPuFOB4*4) zFmsyG=$tN@58GguoxieGxZZkkr&-*&aq&04w5FF)+}(P9?E0iJmT$XWW#i24NRcu> z%jeV$sI^+ma|_=DUu=um1iN=5NsWOJ-`$iZ<=0-EXY0Wn*Vb$ibaJHYk!Pe?s(2D%rT8h36`*0rLBD6=NYZeZ3hp>@nRq%8yt*642#@C*=+J}(e> z8mZL6s0N8o$=7hy{~sJx3ywp;vE#ZTjoIpHEZ&5-Ye;fC85P>Q2W9Gfa{64fcz0In zJ|9?~_h#195Yw;W$Li|tKff=FJoCm=WXzNhkqS%5B)j}La1Qb)U7o7N3m99F1aiI) z8m3Dij<+1`-l@<2pX_%k#avT;IjQ;RMb+2f@GlOI?~yg%fupu+Pq$%z#-F%R6}ASO ztbu zwwk6!(m+`R#d@hxt&0-bwaQXi@=~Q!&{Q5^yXA&au0sJPO}Ra&C1u%ldxlvHK%pBs zZrY25E*K#8uJ!RUn^yCRj}~N zyRE5r`{fk~&OL|1pc>{{Vsr>vB%y?dSzM(XIQ7!I+Y4-yD$81vkKJKtd%($LwNN_o zkKHgNMMhBBLNjHs;oVZgBr7E3LRe1fHUj5W3#z_i<_RT%&>a z+>qv0k+sO(62RJFoF^G+@CdIK0)b+rQ!2xTqe4<-LkRs^lo^)CimZ}=rX#jO8^^$# z>y-sWB1;|#BTBrENGuGU%V0=#%iTIpkaGtx#vn6_q{F6%l^Uu03inF*!Xbv~A~9JS zc8d}3eRKtgQ#pLN<&HzL0XFFpD3l@*)_;EVt{Y}7BS;an7HGwTF$Y01r?`8_3->Cw zHZvbjrw|+PzXe-OlwKm8?gY)^0?;IuB?ym2IQAePzx~07@aIr3qK)l?WWD`6_4deI z8t{6~G~NJqQJeubm~xv)9M-pVjueVR^R(wq0LX+inb{aX45*T!DLOKjsiiBz#ga?> z0p1;{0`3n?LXl39zfwn;rVgy0U307G1B)EH{gs}oN*_D);VDb z6_Vi57D%_a^>Ov=0#@asB(y8H&C*BV8RPa!Dnaf7iRf+wa>Ei!^^$>_@Ps+WrGPAp zryS@UjcTBBcl(;OeAqyY-4@ND7x)x!BFJ}xu>3ybzwn>A@fyYZppsZT23}ahT>LIwmell0GNsmJHFnSKviD~lHXm7M;xLW6cE+YqqwBbSFS3K|k&G=;^~Ck#W!ZjfY-ou_Y%A?DZAfe%Oqxo@)hNJPpD)8AM^%j^kz5j+gzu z(GPnmS`r|@*>ci8O9L#MPZiClG|fMl35;e37RH}s&Mr1@76?0=*{sC#1l!`fft{U5 zS1h(*B}wG2qzULl^w{k7V#0lE*SF#rg?OF`tiE`f>!pM8WyR{AitJUYld`RewML&Z zXQ#8z+3sBBYH-6||gP6V~6#;!M3-RCEwziaZ zQ0tfwwG(_0)<~Wbao_3ecW#4JOy@+#sF#Hy$TfLn`>IUL#uzhnmOap0ht#`WGwwPz zsj=B}BUlO3_5HN(2Bh?zgGR>c4YCxKd$Bf7I2+7*ZRuH6?Z}zNp-(7Q(_~vV)wurc*B>%s$LiT;5?Mjqcaww&f7Dp@Ln}e&J-3?}w;D&5 zkKA;~NMqZK6ALEqsId};K0e%S`LTV_Sh~%4JXs%*Jf2JkzWorjJH%VVGH^pb#kO<0 z(5yn{E}u!98FoOAp|JL)ptq}C3i_$hg5F`p_*q#D26|4O< ztf~g0fWTFNte08m_ErfX=Va_tvJbB#?0nWgFzvFGQ(o@Y2q_HdR^w*#8>Qmf`K zvgxCFzj!Kpd{)=vV7SLm7d;kc+7vpi2*9*a^kpc0eL>gPnc==(kbQkTpDNiNVbVvC ze*3@!jDUmu*IKWjudAdORwj;j7!Ly|8b&LB=)>*5Rh10OlHYY=#@V zj8{plXw6PC(F@x~9_qmEx~pzCy9gI${iyV}*>!C!FxklUqXPU1;`N__8h;F4f4-o` z2r_?NgVu{fB1A+cu%9WxK2~t=F@;*+(188zA+RJTZAR-ZIrjr#3M431@V?~kU!kmqxY*uMO`V8vK!?btNAZ{SJb0BSi-r=yZQ!HYUcBe)h>V{E#1LxS zRAgzi-+1Myovk6Gzfji95mSpw^fE1aBTW2LXw=5Ue^L*;S@k9Gu@d~89(c0^OW>u6 z-$EONfF#vz3o zrhdFyYK%4MeLe7IBh;GIkLscSACg+co}9gG`VocHAJ&goM{2!=patpM2>6g4fb$}9 zDv+YEeA>0obdgw*v7Py&iKv@X*%TNTX{T+ze8YCh6g#tHLi{pRjZI&)b$gj}p3UM3 zVe72rmM$UqsS1K39IBAzVT+OikPm^a{ERJ7paup8f!(YcOq-o-Gue5?nPqdUsqgcs z1cts~CSjNCa1v+U@6e#mKM6a=OGRktK#S;9=O7Q@brIm^;UTc@eYBek1C|FYyJ3*1 zsV{lNyW`wmIO~V*u>5Z7BQ$DQMjp|oGyvP`I);TkABqGc1{B9J**qjH}7Lqe9P ziL{K}v+uZ=B=)#|Pf`J#D*5nlCmk2r5;AYX=;mCB4J*L^6d~vFZUk9IvuQ!F$+!pU zO~%SP5)bg#O^h>0O)z5HhcFw7V;jD0#fb=?_i8*|fY7YEYbmz+koJTadx#bYs0Sgk z86XIF35=T#kc1GV*bd?_ijmvl21#rn55jg&+Y2Hi!ca0IsKJd#jvO)k^sIrL5CT@n z)BjK8OTGBYqP_~xoO&9jA7*YqE zhntt$c8d%X8B0sXyRF1Ak`S`XlUIO?uL?qG;eB>?>-{a7?q6LCO8CwtuOqy;mNE6JMfw5v6 zwu@DppV`H@`=Y)?2#>VGJN>ei`X==;H0~9QZ`7k(Ds^5V=CTNWHM&mY#!fi-p zt4K3#Q8tQmV+cn|b>p{ExL0e^sOP@4Nh>3To4!(`NQ4b%TkB6Wi)Fs*Ab{F1180DhdAKnl!gkjt`Ag z4*F764)&>IJUjKL`pC!3&d$pcbUJg=o0Xn{EO1zc=%$%38gPX z72wTUJbzhEU~;9FuOVg9I-j?!1+3JHnGO|c!5GUa4=X-7&l;6AA>R4}9}^?>1XW$Y zYA`|?yihLq=sTgMZs5`c+U%#J4w5D-b?P2FJHJ7ME;T-M&SwkUOLaNHZr<47^2NYL zo0szRcN59e*SH|%YsR-gVO~awSZ|Xbg__h#P*ZPHzFKKTJouXyef`x?tFKTA-{#Yfk}t?!YSDunau9mD8wkguAJT3u&z_TM(Xo+sH)w48|jdSQPB z(<3B2-{{QQs&Diq-bid>H@E0`_hX#2nJ!M3)i>s4rnsoJ6}vTD^t{J-Bg$h`--B>T zoDl?%0_erJX^Tm*w>c67?6`NrJVi2(ik!= zx#OI6&QzjKc?J;9Yk5Ccv}J$vMme%Io~v|rm(Do-c)^0VwP{2rsQ0oqRmd!B<;&ZAt@pnKJ` zwL_xUxV0$#zQ%7Qb@$HdtlhU3=#w*Y zgIVQ*8a0#AoK-GlxK>pesMfmdY4XK}49a4)Rz988i%T;8vYw31h?@Y0M3u8*40YBKkdzDtFbZD%yz!NfD#pK$uOn$ZNplgOODu6GTV zoOuFlvuEdBiz)V9D-)JJR!d|JVGXHM`8GcD2gWMe)d6mv3NbvKXgF{l} z_<5g0?_~y`GQ@fkpZ77e6M1~zZ=#X+TllH?^4{|(X_+)gse9fF1crv=eV(3f*eYM2 z%)H;_pc*`-p@n#!s#mNT;B!3#m|`c-`!WFKLY61w+@2S(yYA*!pNM>|>UAfSN5=j@Q;FI9v1_lv#@{w3V6FMT;)0;W`mp^l~9%p1C8K2l(`j zM9i~T3N$zBh`{oQu%~y9)+X1@;pYSNbby}D7f(;%>7w@&{P%t|1*?+;%&Ygo)*6$EVmrUdQg?HKqQh*HC)W(Y&jwA5A-o z!pOwAq@Hi%*4|kfDk8dUr=Yw7Wrjn^*#6p=8VK(p=nz{JaLX~|t*@$ns5NGn5e_j3 z<$y$#x1O;bz7?#c)|w59)9J}gxNVwUj>A%6)H8cFU7m+-pg*9)tVp&ainzU8AaI0m z(MprhEQ{DC7vi>~m-Yu{A(9|0FTi0eoQS{;rvS5)mvCVx?w3V_*iL()iMv5j>oVl5 zgt#SDZONqs7u%k8W0x*|0xZPNV`~L>-WH?WnyU)bZaa{Pk?kO^K!nuDYIJ!kki#|0 zd+7%SPuO*XRmgy}3%kis#OX?{n%gJY z#l^Zp8R;_dQyE02zhd{G!Rr`-W8(tGi|mRnYMnA|T-oTG*oh*$i{V{hyW~ackX3(G z*tCmmvmKnKOUc=suqIGnNFs7^Tz;XlI3>*GW)}tp$x2{uVbPJaNY-spP0>4F;CS&CH~=J>|BG3!ufaP>fC}H&{=t8xqhgw z%)+{b?>nmdUAToj#%!2fpcVfo&=;;pe*@j{UAZ*-VaMj1t9SP!IWH4hb6zj z2Y@~8hACM~Ot{?;XAAjC4KwQ2J7oFOkctmx_rW&c$TqADge-=8E#L{ZoAu__Ou+T$f<0iNDp-HVsh|O2}n39dY}(VP~^ZkomsnUrn6^; zxtz99E}|ffO9dI!#LJ5&1`{_p!!v3ui~ z=o0Vdj?H#A7`vc&s&1&Zh9}qY1J`pj=KCFk`5miwLGd-t^w46hoOjL=90p^*VXPeielrL~gkmC4H>oS)bNp&P!%y=uz9c@s z%AFot^+MZb-s-mFZJ{AnR6EsEyP&3hdLfRV4axLVp`J`T9nXg<-g^F6xWPw6!?1O> zQ?OfXQhp6Y=hwmzZ^OUq@b7y3J40%KCOw!AA})*Lu4;IZxH-1m`&y|a2Vx`=XXAP8 z!%gGk>p`T3{6^j`==JB9R=)Z5UsoAwrF)7uchz8p$x5c*WImj*Z7@y!z>Wg~gX@S6ud(A6kLG z)_SB~j$~X%we3)~6kXl5j7=VNZkO-plGl~irf2AiVRxOCmK>nCYQX)Kmd{n4#Wv^} zK|s+Nt&XNCJ=Nbrf1n}&W_ns_bydSs0!PuDo@?!%X|-={JreA?uvh1v(6!k8x}gOt zE&4^Ikf*|kn2~y*BZ%T)dhGCq=+sLW9}U^+nTsEGTJG>$!ySHEOv6%b7iR=^-;AcZOR@jM|Y}+&^TFZ^0bj zkR~`KO+d@Kp{)g>T1qd)=vulip7IrcT(_b-xZ)496|=ys#Cy14@X=PbR;#eqZ|c_C z9$f2J$y(n|k4Q0Fp>&)cGj4p`DLcp*3)V^!u*HFSx%@8<=c%Y{r1z|=J3ZB~BXP{# zMe>FQ1Z~8wh753#91^JBCJQ2Qu0ALyp0Ll66NzccfL*2;T|TC$PB(<)aUB8QixB*GlsuZIAF${4YU7vnJHcu z>W&Hi_lm%8J|mURf0S}BM(>ZUzerEHMSoDw`!5Dg3uFf=@j=xbrwdJi`p@dAA3!tw z<-S8VUZCdCJg7ESGHt9B`2Br7zqQ)_dVKYAxdHz^Ym*HGB=QreY8!76hSW%J|Um8%9)RIj9Aq}os1mTxd zlw1-j7Q058Rd;Da(pB^W&s@Mst$|D?FLl*?Q)>r)xi8qP*7?5Lzc zIYk@wv_brKILX%yS4^|vOM@VqnQVte{^Uob#Y5wac^a`nn@WDNsRGHD`9;3nw~5j# zC161F!ECO0;W9=7`*Z%nKB3P?1fo5fnddFTT`x^b>W1WMe<)L3wc5YPMWxz-@fFl= zxs@|lduXEGSSQM&zHeUn-Fo8Hd1XR8S5YPIHkjd;hvf?VX+0Z-K`3qTA>GN+Iw=4>+)@pRcF>2CBLmU;1S|zjdmvj{rHoG-UfP;G{~o|LX}LnLZZIFeI}@ z2WAEg6?iQ}9_D=*8N);7+wo{#ho8P{gLwumhXthw5i)Nidc>ExLO*|nQRM5Bk=Y@d zr-$E!a{MQ|pCFC8AG2Z<$b2Ur52)uH_sIyP$Vk7jm*X$LL!ck?4ie&DB*Zy-`Zqm& zAba{Cp7zWS$=^HW?}z2@N96B$`Fj`rf*n2p(d3LQ^IOE(6dtK8b8G`1X(aRd;2u1gaIC9}!dO7^dSjr1eI{tQLAyd#YrWrZZ_vTyZKU6PODHy7N?wddkx+H;%$tOAJL ziNxqCzPH3I(08US446t@L(jt72|_lhdX;*?N+Sm2#6lNjY$sra&Zoo)ssy&fp0b0Y z#9s82n5EK3mukbPzSsxBtK$}CG1;PQ8v$3+3RF$a89;JXD93D zO|H*E-BC~=hfycl4vLr=N)Pjy(o3{JxoG%C?6Px;ZushkMS>(;PNZ7}+ir$1Ct$#F zT@bt`8K!g%OI9F@MS8*_D8nOM8@3^8I!r!|()R52{HU0h-&ZYWZ^98R14WO~-6yXX zvo3QL>=K4uiV{e0j=CHd-VWYrYlt`VAaMP))m1e69d|cC80$FRCU(@7G*U8vkxIZ& z7>ON7b%D%nUw6}4=yTTVY9;d2l9PW&N*Q=mOuTKM;^r|4A6wgZDTZ)tY8;VSxgLA8wR} z89nk{%fX)o5JyyezZJn{dK*l~4&DU^oS`CVPh6>C)Rw|f!(=I_Bc-@2xt>q{7y-U& zb>o<}C&rk4k&5`mWE@Sfec_4tLSbNU1WNo}OBV3YgDH4cfN%@1(Wzwr;Ycj>wbCaY z*$isk?1jE)(O(2$_yje^&*uN=;QTLse9@$4`2hoiWXGP*uSGq*?8g_3TTtsgo_u6W zcFnk<~(NlEzyND_HbArpd?7gq1`~qh(Z0cmny0g7 d>EqLetyv)ox-Dmu{yt?&r?Vgln{jg4`9EqzrYrye literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.leed.doctree b/docs/.doctrees/honeybee_radiance_postprocess.leed.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b6eaca0b4b2a9b0f82a3c4b3c7ebef3f3199dee7 GIT binary patch literal 4360 zcmdT{-)mb(7M5d6wq#qf)20*>ciomYP8&&i*oUQsWucFug0@SaT87cRBh9Sm-nlz7 zH-G?qQ41~6`|3RTIf&N4LuPp30_m^a)PF(0q1%f+g&ipv%eCIo7zHR^Ke@Ct2 z=LRO@B3+DV9H%N~#=E^(MR~$f>wokQ{^h^%XRfR1g;BYVn0GB`L|n*Nv($g>T|cN> zA)87%PC`D5lv%3(+FRgGB(pHV#bUl zWASN5qjNfEKJ0^ScK*&5;eM;tt!8!W`qkh0(wBSp&m zB%e~(qtqQ7v%2FY;-k;#|VG!uM}n5mgR_HIGVbCj717GyW$yiocCmy^H^Q_}|C>0i3`; zEQ}wP>ii+D(8d+I0F_EIm8bC}dP#vt|8GBWk8Y?;OvG7mAyzSWAks+YF`J3t(~uRP@h_O$OXwnIndScR4vS;n-do5A}l)~y8(!DdacUC*r0LhI0PNY{YSTV+85gqL7(@M!_W z(@3QjMm2zZLB2wz{%xpKYpCo4l`Yp6Y0MTcLh?G;UBQ#v$*9oYeNbl5$EU9bjCT)8 z<>3uZ138Zg5vj0*jI!lNfqsxs>HJj9Zenl27fAmu zD4EWII=<#?_kMl)uQK7O6jM$0a#T~(P1RQb@izy^56GPFL04O~uh*e}#-F)C6}bkV ztVw}tY6V@oPKcX%0O+kH)dw&2!7xN%SeM6D(lx8DC%>kszHpiCwLCz9xSr0Ng2^Ac z*R7_hku(q&LGhkzRPUl-wym;Mmh4pN6l9eL=x(`wl!>w=~Hx*w;!~Toqir z@NR4D-F|rmf^*NI(5r^ImKYs^97!nXVHQ_u2WDM*cYB6yQf1lNmX}jPWg0PWPH-k>f94M3`5!Qctbl>$emJy@~8Vt1N!I*;}nNr+68?&>9_?Woqeya53i+ ze}H#Ks(||glTc*YKXatCfumk4#^sPm716SBb0-l;&597dGTGqe!i89Uo@Y2BJdKKW ztl|LlZjgv{1`JfBa67OBx~2^^kp%2Yg$Gf%QFx4;dq4(#UX1iz;s%^Ci!<&-&^jk9 zp+XWo;sWUww?3|(VZf@Km4tTbwpsclJZjutNhQc#AQ3%|KyFxKsh%@X6CO0jxD=3O z@w5Y-qg@SD?rvX^md_lBvD>T}bON8^g#`I-5SHI({1^V5OD_1&{HNS?!;D>KxN3MQ z{Bp_VCI9&{=WmDMb3Bd&+RUHO)I39T&?zt05PbboX*y5-tf_o;VMXg^P>}so6q$d# zv(;+hsr5%|jn;dO+#Rl?x$y5{B#;v!K=64f38Yo)m4RHBlzIp+(4S0|Y!akUeSJgN zXm_vd*sV`37TvzGKZ=jG9&B=FbFXR!FBDK}gohsT1_d`#QUZFg0Tp%klS=+0Q1PAr u9Q1&;5JZEwwLwOd2R6)lMZDjL3sCP@uOuYVJm9$(2lB6YGPF1Obo76?M6GB5 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.leed.leed.doctree b/docs/.doctrees/honeybee_radiance_postprocess.leed.leed.doctree new file mode 100644 index 0000000000000000000000000000000000000000..299cb87f4fee322c63e82c3cefd32127162623e4 GIT binary patch literal 49652 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.reader.doctree b/docs/.doctrees/honeybee_radiance_postprocess.reader.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6ca30eda56913d4c23c0ccb584863ef1d9197078 GIT binary patch literal 24307 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

c8qIfi(*OG%;hc}DbFl>WIOT)b3Kw3 zWuYyD=;)Nn%my4@EMO3HGc=j0p(b8^cp-@oJ-k>|6R+N`mc%otvaGuPtyys|gX%u@ zgt-^!x+zVR(KqsD>^%bfVmMIhY4C$Li5bX`v*rcaoS9v5ik#I}16F-N{%Fj{P}}m< z#H(#f5+7$nKua*110c`Z0^HqoGx=_AFEtv|+TJHa&O8QFo zuPefX$|(l8e@uJ?_t%xPjN|?>3s>O&SC$_4^GbmRxc>zVs^k8b)x@jaUlJec{vTEo zueMo9d@T3>ZS{oL%Kbkfz_0c6uM6d0s3lWDSq_AUgytUgX|6^+6)uCAu9~zq9sU}_>PbBfNLbIWs z@LGlDwgA6YXs!$8lWNISP}cI+XO;Ao-db0Lk0_@Y5SnA+#n3z;WARf;`r`!Uc=Az# zfV!`B21g)Cc4GCOrS+!Vp%NcIEAb^I7_UQC;$MQHzPFW}Ll(0V2Y~Zn4jg&nHn70P zRY*IuzJtBwH1p8XF?*I*m}9Yg`epqS#>Lr%7Q-N`gFl76Ys*4Q%~VE8D70)ML+n^x z`t>cKDK4LmESE?vmG;}S6vA{v9NUKfOnc)Zk-Y>=YeF}@}T<& z4N@I+Tc508TA6otI(N!JsUAtboHVSe`(*bfTMtH7o^ zC9p@$_bZbaj`=ykj+*lkFuxZ0ewRu(shO9sKRyt4x>JIEjC{W`mEp+mUR~s0r+mK` zOX$^7#wQ0VgYJ}+adq9$zj2TT4%$AE+m~Q_|D<5hQ!{((^*L zS1-MA8Y$+_3;DzaB*b+hWA-#DPdHqEFI`>z{Xfmue66I2T6+EOfqJDoCB1%+@-@pd z4Oi%YjjB*3$s}L%WDTk^m5|nkHS;wOi>|{LvuS?j;C#(D%@tLm*05a0uF)XXGB)?I zR5>wIvQlo&eDQ%%I1>4q_hE$U6_^&_5@h0hB#_lwmid~=OGlENs2&vOYo_mv)q~V2 zo7U&)jn#%Q))&OPEB*Rn`s+*hwP$@<{QZjf`&IGxW%2hF@%QiOFRhLHQY$m=o5nr- zt|Zm5vgqeZTo7_ae#*y^a-7*PRq@QEe5#&Q?<9Wa@m1dbI7*1`s89!Vuu-O!QH|65 zhQQMu-xhVxG}NrzLKVNbGU`;|2D%-co#69HAJ)cYNb^ndg;wZM-Bm5EvU(_Kp{&Sg zgU`xjR1~6JqPnc2vTO&RP2pR?cEqRON#%O7?_T+|8wNJR; zN74qztZrvi&z-#AgT^!>1)w)eT>AhCyfLhgQUAq&F9DYRvOoPcw9`tCzzVt&kHE!S&nZAP{0Fb!3z-Qd$mg6`mJSs-Gz6NA9#t_ymIGNoA)--nNO zQ6&l`IJMLy0jy|1t`qYd9d(*E_@ZbL#!lMLntDD9+pdOcm*{nb?Vx}!)AA#Qm9$WS z%JfaD&IMXp+w^s;3L%K(awc&VxZNQL<0Df$t~Us)k=-=PPZmXpkJB$qf|{CClMuQg zYHg_eAWAr=muDyWlE^}~nX?5$w9T#=L_dDy4!+Q1Jq=#M;H9X(44zQ>uLo-f@8lZ% zCL;)X{`%S)ntc?)4G^?eU2h8>btCl@44|im?&u*t5LI%g_?ESI>)kNCSz zpzmmgxnEnPyp+%oVvYYU2x{S7D!2+?~x z>>&%E3So=t)-nw2!Ft@5>2zQNGAFo$6gO3~A@Zeo= zU@+7_+~YU4&}&;`sF-MLC;>}x7h1Z^mt@gx*s9%$W7;0y&zuWXz?#p-(FE=bOT>2s zCVV5%;xF2T-7JAASXO{=3#&nCG>Yc@XrYxp?-k9U)=4kuqjsu>jqWql82`2|&|}ia zAD_=rv-r#aoy3hj-#Ce)(&9e8Gq?v|=T6Jd>&ssrXQdYJ5xdcaZT~6L$I~#nOskG> zU@nx>zK*Iv7YZ#uY%sCqF1F-DemHN+0^Gwb6AnSz0pM{9MXaP>ti^mw+z(~CVfx)o z*G|1dbiJX}nD(A4P@GF<6@!iz=;Ptz1rb8Yjb&Q$4%PsOr=qYiJva^`zt4u=WXDzVSEDe}u8 LNz0pXbM^lKvY`$J literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.results.annual_daylight.doctree b/docs/.doctrees/honeybee_radiance_postprocess.results.annual_daylight.doctree new file mode 100644 index 0000000000000000000000000000000000000000..060f076528ed43f3cfe376614cdf442450a2a6e9 GIT binary patch literal 401683 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

6GA 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.results.annual_irradiance.doctree b/docs/.doctrees/honeybee_radiance_postprocess.results.annual_irradiance.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f8769e39a7f43632b2cc334e332ff5090fdb28c1 GIT binary patch literal 233641 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 NpsJQ($jN8p{{o3v-WLD> literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.results.results.doctree b/docs/.doctrees/honeybee_radiance_postprocess.results.results.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1f7ec4907b91990814cd9222dad0a9eae0183b13 GIT binary patch literal 210537 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 W@?Y>%yU}Hg6fwSvP{eI^?EeEq>ix9< literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.type_hints.doctree b/docs/.doctrees/honeybee_radiance_postprocess.type_hints.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bd5f792ecb261c97b22493211e3acdaebdb18999 GIT binary patch literal 3513 zcmdT{TWcIQ6!vY`Ufb(SZWI!yDJ6|Vv%8`6p`@Xu^wHFiV*1oDXlJx5;hE7?mw5dU z+B^he&|B2M(f*A7t$t^2UOP#XLSJfF7#&GR=Y0Ckr{mu`zyHx+DF6JnDTK^tLzX1D zO1KGrEm5({cy7b%aQ{Vk9`=1tvlFA7j(PA4SP=`ECYtBrY4BUL+{)Ap>;0>S$5yJm z-7Y$!D^{O|ebMtBD{ac>ru-K|<@|Ka`OlGNiDY?T zcJc;iD@S}rQJ(u)Xnica;bY;VkC&m!ty?f;VuRTAy{JuHEc0^?ofP;ti>mQ|5N<#;&%_f`-A{M)UwQb->(!*>fj$%_x1IiCW-gO5d5gxGWg&f zqI+lqbK-L`m;>_9{}#x9jAld(tuZW49}(z4BA?z-lMhc^+y=kE=^p6FrkWLE4tqa1 z!V!0>8ki{Ex_v7thE;vs__w?2iU5k=RdhTogJSQza{~Qau_wL(YZe>u-I%u<_Qhl0 z^6#y&4hXwJnb@E%Zr)JqeCzvY)93j(t2fjVdFVGaFO;@X%Aaw-x#ZUcOWR?`@A8=hik4Yt znnfMoN%+`JaopAk(>YMY3e8ytOApr(b4rQglQ}Spcpj?+tAg)2I~ja6FcROlE>1>V zYo#N>@+9R@tS*Hb+u*k=mDBS8nyt4kPF&jQcPIf6&j{d? zBB9{>Da)shO*!CBFkZr=>#u4aE1g6MFF+d{L$Z75yRphA$PsYJq+x^T`Yq^^vS=dH@=ftK=nID!uFJyYIeANP-y7&o za8K3nVA1bVv4J-E6f8_-CT;j(=bqmxcoCsQI7$?a1rFIH%a|c{stf;-u(mLdMkAQb zusF3){h`uRl+$%uSq6ZWk>we#$KpEHU?1Fl_$Bb%(v$d-d$OFn|EzJ3%4NjYW3Gpi z+evu_)Lo|7;@%!%xP}f3=hy$r1*inE2$#h zZ<>su%6@SuX#=3Hmg8y|r7C7Mw0p6@qZ8xet6~GnC4|_0>Yg!-@N zkh%-jsz-wv-X`s!OL~g-4)#?tR^Q@CJTbmU270?_S{$7j@d-6XPteId#w*^f0%(Q2 zX@T39Q9NeNGuOOXXt@lY!0?J5lfTdm{ttVY`8L4${yb|-9Q&~Z_vs>lZDk>GYSvX3 zHgBoc;Tpm6Y^>6@5Xz<3E*aa^y$c?D&8g+4D;NCZkr3o!9M^7%&!h?74(96qcxZ0-H>^lx`c{lO1xc9 ONaSlhq&CKlhkpY=eRTl< literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.util.doctree b/docs/.doctrees/honeybee_radiance_postprocess.util.doctree new file mode 100644 index 0000000000000000000000000000000000000000..27e902fa225ecc3f012076b81fa1dfcd878d3ccf GIT binary patch literal 36887 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.vis_metadata.doctree b/docs/.doctrees/honeybee_radiance_postprocess.vis_metadata.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f6148237307657d4741f629d13d39796066926f7 GIT binary patch literal 3519 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_radiance_postprocess.well.well.doctree b/docs/.doctrees/honeybee_radiance_postprocess.well.well.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6297cdd5b695d1c12703ecbebd30ac8788e9c5b7 GIT binary patch literal 24507 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/index.doctree b/docs/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..29c5a3d1ca21cda04215c897e3ed3cdefc7a0c26 GIT binary patch literal 6450 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 V2_Uja-P+63XltfGy1f1D^nc#)i@*Q? literal 0 HcmV?d00001 diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..ebfb3665 --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +# documentation diff --git a/docs/_modules/honeybee_radiance_postprocess/annual.html b/docs/_modules/honeybee_radiance_postprocess/annual.html new file mode 100644 index 00000000..5b236421 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/annual.html @@ -0,0 +1,744 @@ + + + + + + + honeybee_radiance_postprocess.annual — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + +

+ +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.annual

+"""Shared functions for post-processing annual results."""
+from typing import Union
+import numpy as np
+
+from ladybug.analysisperiod import AnalysisPeriod
+from .util import filter_array
+
+
+
+[docs] +def occupancy_schedule_8_to_6( + timestep: int = 1, as_list: bool = False) -> Union[np.ndarray, list]: + """Create an occupancy schedule for LEED (8 am to 6 pm). + + Args: + timestep: An integer value noting the number of timesteps per hour. + Defaults to 1. + as_list: Boolean toggle to output the schedule as a Python list instead + of a NumPy array. Defaults to False. + + Returns: + A schedule as an array or list. + """ + full_analysis_period = AnalysisPeriod(timestep=timestep) + analysis_period = AnalysisPeriod(st_hour=8, end_hour=17, timestep=timestep) + schedule = np.zeros(8760 * timestep).astype(int) + hours = np.where(np.isin(full_analysis_period.hoys, analysis_period.hoys))[0] + schedule[hours] = 1 + if as_list: + schedule = schedule.tolist() + + return schedule
+ + + +
+[docs] +def schedule_to_hoys( + schedule: Union[list, np.ndarray], + sun_up_hours: Union[list, np.ndarray] = None, as_list: bool = False + ) -> Union[np.ndarray, list]: + """Convert a schedule to hoys. + + Args: + schedule: A list of 8760 values for the occupancy schedule. + sun_up_hours: An optional list of sun up hours as integers. If sun up + hours are provided the function will exclude all values from the + schedule that are not among the sun up hours. Defaults to None. + as_list: Boolean toggle to output the schedule as a Python list instead + of a NumPy array. Defaults to False. + + Returns: + An array or list of occupancy expressed as hoys. + """ + assert len(schedule) == 8760 + if not isinstance(schedule, np.ndarray): + schedule = np.array(schedule).astype(int) + + hours = np.arange(0, 8760, 1) + if sun_up_hours: + sun_up_hours = np.array(sun_up_hours).astype(int) + mask = np.ones(schedule.size, dtype=bool) + mask[sun_up_hours] = False + schedule[mask] = 0 + + occ_hoys = filter_array(hours, np.array(schedule)) + + if as_list: + occ_hoys = occ_hoys.tolist() + + return occ_hoys
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/annualdaylight.html b/docs/_modules/honeybee_radiance_postprocess/annualdaylight.html new file mode 100644 index 00000000..67e74cd5 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/annualdaylight.html @@ -0,0 +1,962 @@ + + + + + + + honeybee_radiance_postprocess.annualdaylight — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.annualdaylight

+"""Functions for post-processing annual daylight outputs.
+
+Note: These functions will most likely be moved to a separate package in the near future.
+"""
+import json
+import os
+import numpy as np
+
+from ladybug.color import Colorset
+from ladybug.datatype.fraction import Fraction
+from ladybug.legend import LegendParameters
+from honeybee_radiance.postprocess.annual import filter_schedule_by_hours, \
+    _process_input_folder
+
+from .metrics import da_array2d, cda_array2d, udi_array2d, \
+    udi_lower_array2d, udi_upper_array2d
+from .util import filter_array
+
+
+
+[docs] +def metrics_to_files(ill_file, occ_pattern, output_folder, threshold=300, + min_t=100, max_t=3000, grid_name=None, total_hours=None, + sun_down_occ_hours=0): + """Compute annual metrics for an ill file and write the results to a folder. + + This function generates 5 different files or daylight autonomy, continuous daylight + autonomy, lower than useful daylight illuminance, useful daylight illuminance and + higher than useful daylight illuminance. + + Args: + ill_file: Path to an ill file generated by Radiance. The ill file should be + tab separated and shot NOT have a header. The results for each sensor point + should be available in a row and and each column should be the illuminance + value for a sun_up_hour. The number of columns should match the number of + sun up hours. + occ_pattern: A list of 0 and 1 values for hours of occupancy. + output_folder: An output folder where the results will be written to. The folder + will be created if not exist. + threshold: Threshold illuminance level for daylight autonomy. Default: 300. + min_t: Minimum threshold for useful daylight illuminance. Default: 100. + max_t: Maximum threshold for useful daylight illuminance. Default: 3000. + grid_name: An optional name for grid name which will be used to name the output + files. If None the name of the input file will be used. + total_hours: An integer for the total number of occupied hours in the + occupancy schedule. If None, it will be assumed that all of the + occupied hours are sun-up hours and are already accounted for + in the the occ_pattern. + + Returns: + Tuple(file.da, file.cda, file.udi, file.udi, file.udi) + + """ + if not os.path.isdir(output_folder): + os.makedirs(output_folder) + + grid_name = grid_name or os.path.split(ill_file)[-1][-4:] + da = os.path.join(output_folder, 'da', '%s.da' % grid_name).replace('\\', '/') + cda = os.path.join(output_folder, 'cda', '%s.cda' % grid_name).replace('\\', '/') + udi = os.path.join(output_folder, 'udi', '%s.udi' % grid_name).replace('\\', '/') + udi_lower = \ + os.path.join(output_folder, 'udi_lower', '%s.udi' % grid_name).replace('\\', '/') + udi_upper = \ + os.path.join(output_folder, 'udi_upper', '%s.udi' % grid_name).replace('\\', '/') + + for file_path in [da, cda, udi, udi_upper, udi_lower]: + folder = os.path.dirname(file_path) + if not os.path.isdir(folder): + os.makedirs(folder) + + mask = np.array(occ_pattern) + results = np.load(ill_file) + results_occ = np.apply_along_axis(filter_array, 1, results, mask=mask) + + dar = da_array2d(results_occ, total_occ=total_hours, threshold=threshold) + np.savetxt(da, dar, fmt='%.2f') + + cdar = cda_array2d(results_occ, total_occ=total_hours, threshold=threshold) + np.savetxt(cda, cdar, fmt='%.2f') + + udir = udi_array2d(results_occ, total_occ=total_hours, min_t=min_t, max_t=max_t) + np.savetxt(udi, udir, fmt='%.2f') + + udi_lowerr = udi_lower_array2d(results_occ, total_occ=total_hours, min_t=min_t, + sun_down_occ_hours=sun_down_occ_hours) + np.savetxt(udi_lower, udi_lowerr, fmt='%.2f') + + udi_upperr = udi_upper_array2d(results_occ, total_occ=total_hours, max_t=max_t) + np.savetxt(udi_upper, udi_upperr, fmt='%.2f') + + return da, cda, udi_lower, udi, udi_upper
+ + + +# TODO - support a list of schedules/schedule folder to match the input grids +
+[docs] +def metrics_to_folder( + results_folder, schedule=None, threshold=300, min_t=100, max_t=3000, + grids_filter='*', sub_folder='metrics' + ): + """Compute annual metrics in a folder and write them in a subfolder. + + This folder is an output folder of annual daylight recipe. Folder should include + grids_info.json and sun-up-hours.txt - the script uses the list in grids_info.json + to find the result files for each sensor grid. + + Args: + results_folder: Results folder. + schedule: An annual schedule for 8760 hours of the year as a list of values. + threshold: Threshold illuminance level for daylight autonomy. Default: 300. + min_t: Minimum threshold for useful daylight illuminance. Default: 100. + max_t: Maximum threshold for useful daylight illuminance. Default: 3000. + grids_filter: A pattern to filter the grids. By default all the grids will be + processed. + sub_folder: An optional relative path for subfolder to copy results files. + Default: metrics + + Returns: + str -- Path to results folder. + + """ + grids, sun_up_hours = _process_input_folder(results_folder, grids_filter) + occ_pattern, total_occ, sun_down_occ_hours = \ + filter_schedule_by_hours(sun_up_hours=sun_up_hours, schedule=schedule) + + metrics_folder = os.path.join(results_folder, sub_folder) + if not os.path.isdir(metrics_folder): + os.makedirs(metrics_folder) + + for grid in grids: + ill_file = os.path.join(results_folder, '%s.npy' % grid['full_id']) + metrics_to_files( + ill_file, occ_pattern, metrics_folder, threshold, min_t, + max_t, grid['full_id'], total_occ, sun_down_occ_hours + ) + + # copy info.json to all results folders + for folder_name in ['da', 'cda', 'udi_lower', 'udi', 'udi_upper']: + grid_info = os.path.join(metrics_folder, folder_name, 'grids_info.json') + with open(grid_info, 'w') as outf: + json.dump(grids, outf) + + metric_info_dict = _annual_daylight_vis_metadata() + for metric, data in metric_info_dict.items(): + file_path = os.path.join(metrics_folder, metric, 'vis_metadata.json') + with open(file_path, 'w') as fp: + json.dump(data, fp, indent=4) + + return metrics_folder
+ + + +def _annual_daylight_vis_metadata(): + """Return visualization metadata for annual daylight.""" + udi_l_lpar = LegendParameters(min=0, max=100, colors=Colorset.nuanced()) + udi_u_lpar = LegendParameters(min=0, max=100, colors=Colorset.glare_study()) + udi_lpar = LegendParameters(min=0, max=100, colors=Colorset.annual_comfort()) + cda_lpar = LegendParameters(min=0, max=100, colors=Colorset.annual_comfort()) + da_lpar = LegendParameters(min=0, max=100, colors=Colorset.annual_comfort()) + + metric_info_dict = { + 'udi_lower': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Useful Daylight Illuminance Lower').to_dict(), + 'unit': '%', + 'legend_parameters': udi_l_lpar.to_dict() + }, + 'udi_upper': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Useful Daylight Illuminance Upper').to_dict(), + 'unit': '%', + 'legend_parameters': udi_u_lpar.to_dict() + }, + 'udi': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Useful Daylight Illuminance').to_dict(), + 'unit': '%', + 'legend_parameters': udi_lpar.to_dict() + }, + 'cda': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Continuous Daylight Autonomy').to_dict(), + 'unit': '%', + 'legend_parameters': cda_lpar.to_dict() + }, + 'da': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Daylight Autonomy').to_dict(), + 'unit': '%', + 'legend_parameters': da_lpar.to_dict() + } + } + + return metric_info_dict + + +def _annual_daylight_config(): + """Return vtk-config for annual daylight. """ + cfg = { + "data": [ + { + "identifier": "Useful Daylight Illuminance Lower", + "object_type": "grid", + "unit": "Percentage", + "path": "udi_lower", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "nuanced", + }, + }, + { + "identifier": "Useful Daylight Illuminance Upper", + "object_type": "grid", + "unit": "Percentage", + "path": "udi_upper", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "glare_study", + "label_parameters": { + "color": [34, 247, 10], + "size": 0, + "bold": True, + }, + }, + }, + { + "identifier": "Useful Daylight Illuminance", + "object_type": "grid", + "unit": "Percentage", + "path": "udi", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "annual_comfort", + "label_parameters": { + "color": [34, 247, 10], + "size": 0, + "bold": True, + }, + }, + }, + { + "identifier": "Continuous Daylight Autonomy", + "object_type": "grid", + "unit": "Percentage", + "path": "cda", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "annual_comfort", + "label_parameters": { + "color": [34, 247, 10], + "size": 0, + "bold": True, + }, + }, + }, + { + "identifier": "Daylight Autonomy", + "object_type": "grid", + "unit": "Percentage", + "path": "da", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "annual_comfort", + "label_parameters": { + "color": [34, 247, 10], + "size": 0, + "bold": True, + }, + }, + }, + ] + } + + return cfg +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/cli/grid.html b/docs/_modules/honeybee_radiance_postprocess/cli/grid.html new file mode 100644 index 00000000..563ef3d0 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/cli/grid.html @@ -0,0 +1,968 @@ + + + + + + + honeybee_radiance_postprocess.cli.grid — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.cli.grid

+"""honeybee radiance postprocess grid commands."""
+import click
+import sys
+import logging
+import json
+import numpy as np
+from pathlib import Path
+
+from honeybee_radiance_postprocess.reader import binary_to_array
+from ..annualdaylight import _annual_daylight_vis_metadata
+
+_logger = logging.getLogger(__name__)
+
+
+@click.group(help='Commands for generating and modifying sensor grids.')
+def grid():
+    pass
+
+
+@grid.command('merge-folder')
+@click.argument(
+    'input-folder',
+    type=click.Path(exists=True, file_okay=False, dir_okay=True, resolve_path=True))
+@click.argument(
+    'output-folder',
+    type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
+@click.argument('extension', type=str)
+@click.option(
+    '--dist-info', '-di',
+    help='An optional input for distribution information to put the grids back together '
+    '. Alternatively, the command will look for a _redist_info.json file inside the '
+    'folder.', type=click.Path(file_okay=True, dir_okay=False, resolve_path=True)
+)
+@click.option(
+    '--output-extension', '-oe',
+    help='Output file extension. This is only used if as_text is set to True. '
+    'Otherwise the output extension will be npy.', default='ill', type=click.STRING
+)
+@click.option(
+    '--as-text', '-at',
+    help='Set to True if the output files should be saved as text instead of '
+    'NumPy files.', default=False, type=click.BOOL
+)
+@click.option(
+    '--fmt',
+    help='Format for the output files when saved as text.', default='%.2f',
+    type=click.STRING
+)
+@click.option(
+    '--delimiter',
+    help='Delimiter for the output files when saved as text.',
+    type=click.Choice(['space', 'tab']), default='tab'
+)
+def merge_grid_folder(input_folder, output_folder, extension, dist_info,
+                      output_extension, as_text, fmt, delimiter):
+    """Restructure files in a distributed folder.
+
+    \b
+    Args:
+        input_folder: Path to input folder.
+        output_folder: Path to the new restructured folder
+        extension: Extension of the files to collect data from. It will be ``pts`` for
+            sensor files. Another common extension is ``ill`` for the results of daylight
+            studies.
+    """
+    try:
+        # handle optional case for Functions input
+        if dist_info and not Path(dist_info).is_file():
+            dist_info = None
+        restore_original_distribution(
+            input_folder, output_folder, extension, dist_info, output_extension,
+            as_text, fmt, delimiter)
+    except Exception:
+        _logger.exception('Failed to restructure data from folder.')
+        sys.exit(1)
+    else:
+        sys.exit(0)
+
+
+@grid.command('merge-folder-metrics')
+@click.argument(
+    'input-folder',
+    type=click.Path(exists=True, file_okay=False, dir_okay=True, resolve_path=True))
+@click.argument(
+    'output-folder',
+    type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
+@click.option(
+    '--dist-info', '-di',
+    help='An optional input for distribution information to put the grids back together '
+    '. Alternatively, the command will look for a _redist_info.json file inside the '
+    'folder.', type=click.Path(file_okay=True, dir_okay=False, resolve_path=True)
+)
+@click.option(
+    '--grids-info', '-gi',
+    help='An optional input for grid information that will be copied to each '
+    'metric folder. This file is usually called grids_info.json.',
+    type=click.Path(file_okay=True, dir_okay=False, resolve_path=True)
+)
+def merge_metrics_folder(input_folder, output_folder, dist_info, grids_info):
+    """Restructure annual daylight metrics in a distributed folder.
+    
+    Since this command redistributes metrics it is expected that the input
+    folder has sub folder
+
+    \b
+    Args:
+        input_folder: Path to input folder.
+        output_folder: Path to the new restructured folder
+    """
+    try:
+        # handle optional case for Functions input
+        if dist_info and not Path(dist_info).is_file():
+            dist_info = None
+        if grids_info:
+            with open(grids_info) as gi:
+                grids_info = json.load(gi)
+        extension_mapper = {
+            'da': 'da',
+            'cda': 'cda',
+            'udi': 'udi',
+            'udi_lower': 'udi',
+            'udi_upper': 'udi'
+        }
+        metric_info_dict = _annual_daylight_vis_metadata()
+        input_folder = Path(input_folder)
+        output_folder = Path(output_folder)
+        for metric, extension in extension_mapper.items():
+            metric_folder = input_folder.joinpath(metric)
+            metric_out = output_folder.joinpath(metric)
+            restore_original_distribution_metrics(
+                metric_folder, output_folder, metric, extension, dist_info)
+
+            if grids_info:
+                info_file = metric_out.joinpath('grids_info.json')
+                info_file.write_text(json.dumps(grids_info))
+
+            vis_data = metric_info_dict[metric]
+            vis_metadata_file = metric_out.joinpath('vis_metadata.json')
+            vis_metadata_file.write_text(json.dumps(vis_data, indent=4))
+    except Exception:
+        _logger.exception('Failed to restructure data from folder.')
+        sys.exit(1)
+    else:
+        sys.exit(0)
+
+
+
+[docs] +def restore_original_distribution( + input_folder, output_folder, extension='npy', dist_info=None, + output_extension='ill', as_text=False, fmt='%.2f', input_delimiter=',', + delimiter='tab'): + """Restructure files to the original distribution based on the distribution info. + + It will assume that the files in the input folder are NumPy files. However, + if it fails to load the files as arrays it will try to load from binary + Radiance files to array. + + Args: + input_folder: Path to input folder. + output_folder: Path to the new restructured folder + extension: Extension of the files to collect data from. Default is ``npy`` for + NumPy files. Another common extension is ``ill`` for the results of daylight + studies. + dist_info: Path to dist_info.json file. If None, the function will try to load + ``_redist_info.json`` file from inside the input_folder. (Default: None). + output_extension: Output file extension. This is only used if as_text + is set to True. Otherwise the output extension will be ```npy``. + as_text: Set to True if the output files should be saved as text instead + of NumPy files. + fmt: Format for the output files when saved as text. + input_delimiter: Delimiter for the input files. This is used only if the + input files are text files. + delimiter: Delimiter for the output files when saved as text. + """ + if not dist_info: + _redist_info_file = Path(input_folder, '_redist_info.json') + else: + _redist_info_file = Path(dist_info) + + assert _redist_info_file.is_file(), 'Failed to find %s' % _redist_info_file + + with open(_redist_info_file) as inf: + data = json.load(inf) + + # create output folder + output_folder = Path(output_folder) + if not output_folder.is_dir(): + output_folder.mkdir(parents=True, exist_ok=True) + + src_file = Path() + for f in data: + output_file = Path(output_folder, f['identifier']) + # ensure the new folder is created. in case the identifier has a subfolder + parent_folder = output_file.parent + if not parent_folder.is_dir(): + parent_folder.mkdir() + + out_arrays = [] + for src_info in f['dist_info']: + st = src_info['st_ln'] + end = src_info['end_ln'] + new_file = Path(input_folder, '%s.%s' % (src_info['identifier'], extension)) + if not new_file.samefile(src_file): + src_file = new_file + try: + array = np.load(src_file) + except: + try: + array = binary_to_array(src_file) + except: + try: + array = np.loadtxt( + src_file, delimiter=input_delimiter) + except Exception: + raise RuntimeError( + f'Failed to load input file "{src_file}"') + slice_array = array[st:end+1,:] + + out_arrays.append(slice_array) + + out_array = np.concatenate(out_arrays) + # save numpy array, .npy extension is added automatically + if not as_text: + np.save(output_file, out_array) + else: + if output_extension.startswith('.'): + output_extension = output_extension[1:] + if delimiter == 'tab': + delimiter = '\t' + elif delimiter == 'space': + delimiter = ' ' + elif delimiter == 'comma': + delimiter = ',' + np.savetxt(output_file.with_suffix(f'.{output_extension}'), + out_array, fmt=fmt, delimiter=delimiter)
+ + + +
+[docs] +def restore_original_distribution_metrics( + input_folder, output_folder, metric, extension, dist_info=None): + """Restructure files to the original distribution based on the distribution info. + + It will assume that the files in the input folder are NumPy files. However, + if it fails to load the files as arrays it will try to load from binary + Radiance files to array. + + Args: + input_folder: Path to input folder. + output_folder: Path to the new restructured folder + metric: Name of the metric to redistribute. + extension: Extension of the files to collect data from. For annual + daylight metrics the extension can be 'da', 'cda', or 'udi'. + dist_info: Path to dist_info.json file. If None, the function will try to load + ``_redist_info.json`` file from inside the input_folder. (Default: None). + """ + if not dist_info: + _redist_info_file = Path(input_folder, '_redist_info.json') + else: + _redist_info_file = Path(dist_info) + + assert _redist_info_file.is_file(), 'Failed to find %s' % _redist_info_file + + with open(_redist_info_file) as inf: + data = json.load(inf) + + # create output folder + output_folder = Path(output_folder) + if not output_folder.is_dir(): + output_folder.mkdir() + + src_file = Path() + for f in data: + output_file = Path(output_folder, metric, '%s.%s' % (f['identifier'], extension)) + # ensure the new folder is created. in case the identifier has a subfolder + parent_folder = output_file.parent + if not parent_folder.is_dir(): + parent_folder.mkdir() + + out_arrays = [] + for src_info in f['dist_info']: + st = src_info['st_ln'] + end = src_info['end_ln'] + new_file = Path(input_folder, '%s.%s' % (src_info['identifier'], extension)) + if not new_file.samefile(src_file): + src_file = new_file + array = np.loadtxt(src_file) + slice_array = array[st:end+1] + out_arrays.append(slice_array) + + out_array = np.concatenate(out_arrays) + # save array as txt file + np.savetxt(output_file, out_array, fmt='%.2f')
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/cli/util.html b/docs/_modules/honeybee_radiance_postprocess/cli/util.html new file mode 100644 index 00000000..1835478e --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/cli/util.html @@ -0,0 +1,805 @@ + + + + + + + honeybee_radiance_postprocess.cli.util — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.cli.util

+from ladybug.analysisperiod import AnalysisPeriod
+from datetime import datetime
+import copy
+
+
+
+[docs] +def get_hoys(start_date, start_time, end_date, end_time, timestep, leap_year): + """Return list of hours from start date, star hour, end date and end hour. + + Date should be formatted as MMM-DD (e.g JUL-21) and hours must be formatted + as HH:MM (e.g 18:30). + """ + # convert datetimes + try: + start_date = datetime.strptime(start_date, '%b-%d') + except ValueError as e: + raise ValueError('Wrong input for start date:\n\t{}'.format(e)) + try: + start_time = datetime.strptime(start_time, '%H:%M') + except ValueError as e: + raise ValueError('Wrong input for start time:\n\t{}'.format(e)) + try: + end_date = datetime.strptime(end_date, '%b-%d') + except ValueError as e: + raise ValueError('Wrong input for end date:\n\t{}'.format(e)) + try: + end_time = datetime.strptime(end_time, '%H:%M') + except ValueError as e: + raise ValueError('Wrong input for end time:\n\t{}'.format(e)) + + org_end_time = copy.copy(end_time) + if end_time.minute != 0: + if end_time.hour != 23: + end_time = datetime( + end_time.year, end_time.month, end_time.day, end_time.hour + 1, 0 + ) + else: + end_time = datetime( + end_time.year, end_time.month, end_time.day + 1, 0, 0 + ) + ap = AnalysisPeriod( + start_date.month, start_date.day, start_time.hour, + end_date.month, end_date.day, end_time.hour, + timestep, leap_year + ) + + hoys = ap.hoys + + # filter start and end hours if needed + start_index = 0 + end_index = None + if start_time.minute != 0: + # remove the hours that are smaller than this hour + for start_index, h in enumerate(hoys): + if round(60 * h) % 60 >= start_time.minute: + break + + if org_end_time.minute != 0: + for end_index, h in enumerate(reversed(hoys)): + if (60 * h) % 60 <= org_end_time.minute: + break + + if start_index == 0 and end_index is None: + return hoys + elif end_index is None: + return hoys[start_index:] + else: + return hoys[start_index: -1 * (end_index + 1)]
+ + + +
+[docs] +def handle_operator(operator): + """Handle operator for rmtxopt command.""" + if operator == '+': + return '+' + elif operator == '-': + return '+ -s 1.0' + elif operator == '/': + return '/' + elif operator == '*': + return '"*"' + else: + raise ValueError('Invalid operator: %s' % operator)
+ + + +
+[docs] +def remove_header(input_file): + """Remove the header text from a Radiance matrix file.""" + inf = open(input_file) + first_line = next(inf) + if first_line[:10] == '#?RADIANCE': + for line in inf: + if line[:7] == 'FORMAT=': + # pass next empty line + next(inf) + first_line = next(inf) + break + continue + return first_line, inf
+ + + +
+[docs] +def get_compare_func(include_min, include_max, comply): + if include_max and include_min: + if comply: + compare = lambda value, minimum, maximum: minimum <= value <= maximum + else: + compare = lambda value, minimum, maximum: not (minimum <= value <= maximum) + elif not include_max and not include_min: + if comply: + compare = lambda value, minimum, maximum: minimum < value < maximum + else: + compare = lambda value, minimum, maximum: not (minimum < value < maximum) + elif include_max and not include_min: + if comply: + compare = lambda value, minimum, maximum: minimum < value <= maximum + else: + compare = lambda value, minimum, maximum: not (minimum < value <= maximum) + elif not include_max and include_min: + if comply: + compare = lambda value, minimum, maximum: minimum <= value < maximum + else: + compare = lambda value, minimum, maximum: not (minimum <= value < maximum) + + return compare
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/data_type.html b/docs/_modules/honeybee_radiance_postprocess/data_type.html new file mode 100644 index 00000000..27e70f36 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/data_type.html @@ -0,0 +1,781 @@ + + + + + + + honeybee_radiance_postprocess.data_type — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.data_type

+"""Functions for NumPy data type (dtype)."""
+from typing import Tuple
+import numpy as np
+
+
+
+[docs] +def smallest_integer_dtype(array: np.ndarray) -> np.signedinteger: + """Return the smallest possible integer dtype. + + Args: + array: NumPy array. + + Returns: + A NumPy integer dtype. + """ + if np.all(array >= np.iinfo(np.int8).min) and \ + np.all(array <= np.iinfo(np.int8).max): + return np.int8 + elif np.all(array >= np.iinfo(np.int16).min) and \ + np.all(array <= np.iinfo(np.int16).max): + return np.int16 + elif np.all(array >= np.iinfo(np.int32).min) and \ + np.all(array <= np.iinfo(np.int32).max): + return np.int32 + elif np.all(array >= np.iinfo(np.int64).min) and \ + np.all(array <= np.iinfo(np.int64).max): + return np.int64
+ + + +
+[docs] +def smallest_float_dtype(array: np.ndarray, rtol: float = 1e-5, + atol: float = 1e-5) -> np.floating: + """Return the smallest possible float dtype. + + The allclose function is used to check if a certain floating-point precision + can be used without losing accuracy. + + Args: + array: NumPy array. + rtol: The relative tolerance parameter for `np.allclose`. The default + is 1e-5. + atol: The absolute tolerance parameter for `np.allclose`. The default + is 1e-5. + + Returns: + A NumPy floating dtype. + """ + if np.all((array >= np.finfo(np.float16).min) & \ + (array <= np.finfo(np.float16).max)): + if np.allclose(array, array.astype(np.float16), rtol=rtol, atol=atol): + return np.float16 + if np.all((array >= np.finfo(np.float32).min) & \ + (array <= np.finfo(np.float32).max)): + if np.allclose(array, array.astype(np.float32), rtol=rtol, atol=atol): + return np.float32 + if np.all((array >= np.finfo(np.float64).min) & \ + (array <= np.finfo(np.float64).max)): + if np.allclose(array, array.astype(np.float64), rtol=rtol, atol=atol): + return np.float64
+ + + +
+[docs] +def smallest_dtype(array: np.ndarray, rtol: float = 1e-5, atol: float = 1e-5 + ) -> Tuple[np.signedinteger, np.floating]: + """Return the smallest possible dtype. + + Args: + array: NumPy array. + rtol: The relative tolerance parameter for `np.allclose`. The default + is 1e-5. This is also used if the dtype of the array is np.floating. + atol: The absolute tolerance parameter for `np.allclose`. The default + is 1e-5. This is also used if the dtype of the array is np.floating. + + Returns: + A NumPy dtype. + """ + if np.issubdtype(array.dtype, np.integer): + return smallest_integer_dtype(array) + elif np.issubdtype(array.dtype, np.floating): + return smallest_float_dtype(array, rtol=rtol, atol=atol) + else: + raise TypeError(f'Expected integer or floating dtype. Got {array.dtype}')
+ + + +
+[docs] +def set_smallest_dtype(array: np.ndarray, rtol: float = 1e-5, + atol: float = 1e-5) -> np.ndarray: + """Return a NumPy array with the smallest possible dtype. + + Args: + array: NumPy array. + rtol: The relative tolerance parameter for `np.allclose`. The default + is 1e-5. This is also used if the dtype of the array is np.floating. + atol: The absolute tolerance parameter for `np.allclose`. The default + is 1e-5. This is also used if the dtype of the array is np.floating. + + Returns: + A new NumPy array with a smaller dtype. + """ + dtype = smallest_dtype(array, rtol=rtol, atol=atol) + return array.astype(dtype)
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/dynamic.html b/docs/_modules/honeybee_radiance_postprocess/dynamic.html new file mode 100644 index 00000000..50f37bca --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/dynamic.html @@ -0,0 +1,987 @@ + + + + + + + honeybee_radiance_postprocess.dynamic — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.dynamic

+"""Post-processing classes for dynamic schedules."""
+import json
+import os
+import sys
+from itertools import islice, cycle
+
+from honeybee.config import folders
+
+
+
+[docs] +class ApertureGroupSchedule(object): + """ApertureGroupSchedule. + + This class contains the dynamic states schedule of a single ApertureGroup. + + Args: + identifier: Identifier of the ApertureGroup. + schedule: A list or tuple of integer values. + + Properties: + * identifier + * schedule + * is_static + """ + __slots__ = ('_identifier', '_schedule', '_is_static') + + def __init__(self, identifier, schedule, is_static=None): + """Initialize ApertureGroupSchedule.""" + self._identifier = identifier + self.schedule = schedule + self.is_static = is_static + +
+[docs] + @classmethod + def from_dict(cls, data): + """Initialize a ApertureGroupSchedule from a dictionary. + + Args: + data: A dictionary representation of an ApertureGroupSchedule + object. + """ + identifier = data['identifier'] + schedule = data['schedule'] + is_static = data['is_static'] if 'is_static' in data else None + return cls(identifier, schedule, is_static)
+ + + @property + def identifier(self): + """Return identifier.""" + return self._identifier + + @property + def schedule(self): + """Return ApertureGroup schedule.""" + return self._schedule + + @schedule.setter + def schedule(self, schedule): + assert isinstance(schedule, (list, tuple)), \ + ('Failed to add schedule. Received input of type: ' + '%s. Expected input of type: list or tuple.' % type(schedule)) + if isinstance(schedule, tuple): + schedule = list(schedule) + if len(schedule) < 8760: + schedule = list(islice(cycle(schedule), 8760)) + elif len(schedule) > 8760: + error_message = ( + 'The light path %s has %s values in ' + 'its states schedule. Maximum allowed number of values ' + 'is 8760.' % (self.identifier, len(schedule)) + ) + raise ValueError(error_message) + self._schedule = schedule + + @property + def is_static(self): + """Return True if schedule is static.""" + return self._is_static + + @is_static.setter + def is_static(self, value): + if value is not None: + assert isinstance(value, bool) + self._is_static = value + else: + if len(set(self.schedule)) == 1: + self._is_static = True + else: + self._is_static = False + +
+[docs] + def to_dict(self): + """Return ApertureGroupSchedule as a dictionary.""" + base = {} + base['identifier'] = self.identifier + base['schedule'] = self.schedule + base['is_static'] = self.is_static + return base
+ + +
+[docs] + def ToString(self): + """Overwrite .NET ToString.""" + return self.__repr__()
+ + + def __repr__(self): + return '{}: {}'.format(self.__class__.__name__, self.identifier)
+ + + +
+[docs] +class DynamicSchedule(object): + """DynamicSchedule. + + This class contains a single property (dynamic_schedule). This property is + a dictionary where keys are ApertureGroup identifiers and the value for + each key is the dynamic schedule for the ApertureGroup. + + Args: + dynamic_schedule: A dictionary of ApertureGroup identifier and + schedules. + + Properties: + * dynamic_schedule + """ + __slots__ = ('_dynamic_schedule',) + + def __init__(self, dynamic_schedule = None): + self.dynamic_schedule = dynamic_schedule + +
+[docs] + @classmethod + def from_group_schedules(cls, group_schedules): + """Initialize a DynamicSchedule from a list of ApertureGroupSchedules. + + The method will automatically sense if there are duplicated groups in + the list and ensure the group schedule only appears once. + + Args: + data: A dictionary representation of a DynamicSchedule objects. + """ + dyn_sch = cls() + dyn_sch_ids = set() + for _ap_group in group_schedules: + assert isinstance(_ap_group, ApertureGroupSchedule), \ + 'Expected Aperture Group Schedule. Got {}'.format(type(_ap_group)) + if _ap_group.identifier not in dyn_sch_ids: + dyn_sch_ids.add(_ap_group.identifier) + dyn_sch.add_aperture_group_schedule(_ap_group) + return dyn_sch
+ + +
+[docs] + @classmethod + def from_dict(cls, data): + """Initialize a DynamicSchedule from a dictionary. + + Args: + data: A dictionary representation of a DynamicSchedule objects. + """ + dynamic_schedule = {} + for identifier, group in data.items(): + dynamic_schedule[identifier] = ApertureGroupSchedule.from_dict(group) + return cls(dynamic_schedule)
+ + +
+[docs] + @classmethod + def from_json(cls, json_file): + """Initialize a DynamicSchedule from a JSON file. + + Args: + json_file: Path to JSON file. + """ + assert os.path.isfile(json_file), 'Failed to find %s' % json_file + if sys.version_info < (3, 0): + with open(json_file) as inf: + data = json.load(inf) + else: + with open(json_file, encoding='utf-8') as inf: + data = json.load(inf) + return cls.from_dict(data)
+ + + @property + def dynamic_schedule(self): + """Return dynamic schedule as a dictionary.""" + return self._dynamic_schedule + + @dynamic_schedule.setter + def dynamic_schedule(self, dynamic_schedule): + if not dynamic_schedule: + dynamic_schedule = {} + assert isinstance(dynamic_schedule, dict), \ + 'Expected dictionary. Got %s.' % type(dynamic_schedule) + self._dynamic_schedule = dynamic_schedule + +
+[docs] + def add_aperture_group_schedule(self, aperture_group_schedule): + """Add an ApertureGroupSchedule to the DynamicSchedule instance. + + Args: + aperture_group_schedule: An ApertureGroupSchedule object. + """ + assert isinstance(aperture_group_schedule, ApertureGroupSchedule), \ + ('Failed to add ApertureGroupSchedule. Received input of type: ' + '%s. Expected input of type: ApertureGroupSchedule.' \ + % type(aperture_group_schedule)) + identifier = aperture_group_schedule.identifier + self.dynamic_schedule[identifier] = aperture_group_schedule
+ + +
+[docs] + def filter_by_identifiers(self, identifiers): + """Filter the DynamicSchedule by identifiers. + + This method returns a filtered DynamicSchedule object. + + Args: + identifiers: A list of identifiers. + + Returns: + A filtered DynamicSchedule object. + """ + filter_dyn_sch = DynamicSchedule() + for identifier in identifiers: + if identifier in self.dynamic_schedule: + filter_dyn_sch.add_aperture_group_schedule( + self.dynamic_schedule[identifier] + ) + else: + filter_dyn_sch.add_aperture_group_schedule( + ApertureGroupSchedule(identifier, [0]) + ) + return filter_dyn_sch
+ + +
+[docs] + def to_dict(self, simplified=False): + """Return DynamicSchedule as a dictionary.""" + base = {} + for identifier, group in self.dynamic_schedule.items(): + if not simplified: + base[identifier] = group.to_dict() + else: + base[identifier] = group.to_dict()['schedule'] + return base
+ + +
+[docs] + def to_json(self, folder=None, file_name=None, indent=None, simplified=False): + """Write a DynamicSchedule to JSON. + + Args: + folder: A text string for the directory where the JSON file will be + written. If unspecified, the default simulation folder will be + used. This is usually at "C:\\Users\\USERNAME\\simulation." + file_name: _description_. Defaults to None. + indent: A positive integer to set the indentation used in the + resulting JSON file. (Default: None). + + Returns: + json_file: Path to JSON file. + """ + # create dictionary of the DynamicSchedule + dyn_sch_dict = self.to_dict(simplified=simplified) + + # set up name and folder for the JSON + file_name = file_name if file_name else 'dynamic_schedule' + if not file_name.endswith('.json'): + file_name += '.json' + folder = folder if folder is not None else folders.default_simulation_folder + json_file = os.path.join(folder, file_name) + + # write JSON + with open(json_file, 'w') as fp: + json.dump(dyn_sch_dict, fp, indent=indent) + return json_file
+ + +
+[docs] + def duplicate(self): + """Get a copy of this object.""" + return self.__copy__()
+ + +
+[docs] + def ToString(self): + """Overwrite .NET ToString.""" + return self.__repr__()
+ + + def __copy__(self): + new_dyn_sch = DynamicSchedule(self.dynamic_schedule) + return new_dyn_sch + + def __repr__(self): + return '{}'.format(self.__class__.__name__)
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/electriclight.html b/docs/_modules/honeybee_radiance_postprocess/electriclight.html new file mode 100644 index 00000000..be1006c5 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/electriclight.html @@ -0,0 +1,693 @@ + + + + + + + honeybee_radiance_postprocess.electriclight — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.electriclight

+"""Functions for post-processing daylight outputs into electric lighting schedules."""
+from typing import List
+import numpy as np
+
+
+[docs] +def array_to_dimming_fraction( + array: np.ndarray, su_pattern: List[int], setpt: float, m_pow: float, + m_lgt: float, off_m: float) -> list: + """Compute hourly dimming fractions for a given result file.""" + fract_dim = (setpt - array) / (setpt - m_lgt) + par_dim = fract_dim + ((1 - fract_dim) * m_pow) + su_values = np.where(array > setpt, 0 if off_m else m_pow, + (np.where(array <= m_lgt, 1, par_dim))).sum(axis=0) + su_values = su_values / array.shape[0] + + dim_fract = np.ones(8760) + dim_fract[su_pattern] = su_values + + return dim_fract
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/en17037.html b/docs/_modules/honeybee_radiance_postprocess/en17037.html new file mode 100644 index 00000000..cc57dd4d --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/en17037.html @@ -0,0 +1,977 @@ + + + + + + + honeybee_radiance_postprocess.en17037 — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.en17037

+"""Functions for EN 17037 post-processing."""
+from typing import Union
+from pathlib import Path
+import json
+import numpy as np
+
+from ladybug.color import Colorset
+from ladybug.datatype.fraction import Fraction
+from ladybug.legend import LegendParameters
+
+from .results.annual_daylight import AnnualDaylight
+from .dynamic import DynamicSchedule
+from .metrics import da_array2d
+from .util import filter_array
+
+
+
+[docs] +def en17037_to_files( + array: np.ndarray, metrics_folder: Path, grid_info: dict) -> list: + """Compute annual EN 17037 metrics for a NumPy array and write the results + to a folder. + + This function generates 6 different files for daylight autonomy based on + the varying level of recommendation in EN 17037. + + Args: + array: A 2D NumPy array. + metrics_folder: An output folder where the results will be written to. + The folder will be created if it does not exist. + grid_info: A grid information dictionary. + + Returns: + tuple -- Tuple of lists of paths for da, sda, and compliance folders. + """ + recommendations = { + 'minimum_illuminance': { + 'minimum': 100, + 'medium': 300, + 'high': 500 + }, + 'target_illuminance': { + 'minimum': 300, + 'medium': 500, + 'high': 750 + } + } + compliance_value = { + 'minimum': 1, + 'medium': 2, + 'high': 3 + } + + grid_id = grid_info['full_id'] + grid_count = grid_info['count'] + + da_folders = [] + sda_folders = [] + compliance_folders = [] + da_folder = metrics_folder.joinpath('da') + sda_folder = metrics_folder.joinpath('sda') + compliance_folder = metrics_folder.joinpath('compliance_level') + + for target_type, thresholds in recommendations.items(): + compliance_level = None + for level, threshold in thresholds.items(): + # da + da_level_folder = \ + da_folder.joinpath('_'.join([target_type, str(threshold)])) + da_file = da_level_folder.joinpath(f'{grid_id}.da') + if not da_file.parent.is_dir(): + da_file.parent.mkdir(parents=True) + da = da_array2d(array, total_occ=4380, threshold=threshold) + np.savetxt(da_file, da, fmt='%.2f') + + # sda + sda_level_folder = \ + sda_folder.joinpath('_'.join([target_type, str(threshold)])) + sda_file = sda_level_folder.joinpath(f'{grid_id}.sda') + if not sda_file.parent.is_dir(): + sda_file.parent.mkdir(parents=True) + sda = (da >= 50).mean() * 100 + with open(sda_file, 'w') as sdaf: + sdaf.write(str(round(sda, 2))) + + space_target = 50 if target_type == 'target_illuminance' else 95 + if sda >= space_target: + compliance_level = np.full((grid_count), compliance_value[level], dtype=int) + + da_folders.append(da_file.parent) + sda_folders.append(sda_file.parent) + + if compliance_level is None: + compliance_level = np.zeros(grid_count, dtype=int) + compliance_level_folder = compliance_folder.joinpath(target_type) + compliance_level_file = compliance_level_folder.joinpath(f'{grid_id}.pf') + if not compliance_level_file.parent.is_dir(): + compliance_level_file.parent.mkdir(parents=True) + np.savetxt(compliance_level_file, compliance_level, fmt='%i') + compliance_folders.append(compliance_level_file.parent) + + return da_folders, sda_folders, compliance_folders
+ + + +
+[docs] +def en17037_to_folder( + results: Union[str, AnnualDaylight], schedule: list, + states: DynamicSchedule = None, grids_filter: str = '*', + sub_folder: str = 'en17037') -> Path: + """Compute annual EN 17037 metrics in a folder and write them in a subfolder. + + The results is an output folder of annual daylight recipe. + + Args: + results: Results folder. + schedule: An annual schedule for 8760 hours of the year as a list of + values. This should be a daylight hours schedule. + grids_filter: A pattern to filter the grids. By default all the grids + will be processed. + states: A dictionary of states. Defaults to None. + sub_folder: An optional relative path for subfolder to copy results + files. Default: en17037. + + Returns: + str -- Path to results folder. + """ + if not isinstance(results, AnnualDaylight): + results = AnnualDaylight(results, schedule=schedule) + else: + results.schedule = schedule + + total_occ = results.total_occ + occ_mask = results.occ_mask + + grids_info = results._filter_grids(grids_filter=grids_filter) + + if total_occ != 4380: + raise ValueError( + f'There are {total_occ} occupied hours in the schedule. According ' + 'to EN 17037 the schedule must consist of the daylight hours ' + 'which is defined as the half of the year with the largest ' + 'quantity of daylight') + + metrics_folder = Path(results.folder).parent.joinpath(sub_folder) + + for grid_info in grids_info: + array = results._array_from_states( + grid_info, states=states, res_type='total', zero_array=True) + if np.any(array): + array = np.apply_along_axis( + filter_array, 1, array, occ_mask) + da_folders, sda_folders, compliance_folders = en17037_to_files( + array, metrics_folder, grid_info) + + # copy grids_info.json to all results folders + for folder in da_folders + sda_folders + compliance_folders: + grids_info_file = Path(folder, 'grids_info.json') + with open(grids_info_file, 'w') as outf: + json.dump(grids_info, outf, indent=2) + + metric_info_dict = _annual_daylight_en17037_vis_metadata() + da_folder = metrics_folder.joinpath('da') + for metric, data in metric_info_dict.items(): + file_path = da_folder.joinpath(metric, 'vis_metadata.json') + with open(file_path, 'w') as fp: + json.dump(data, fp, indent=4) + + return metrics_folder
+ + + +def _annual_daylight_en17037_vis_metadata(): + """Return visualization metadata for annual daylight.""" + da_lpar = LegendParameters(min=0, max=100, colors=Colorset.annual_comfort()) + + metric_info_dict = { + 'minimum_illuminance_100': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Daylight Autonomy - minimum 100 lux').to_dict(), + 'unit': '%', + 'legend_parameters': da_lpar.to_dict() + }, + 'minimum_illuminance_300': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Daylight Autonomy - minimum 300 lux').to_dict(), + 'unit': '%', + 'legend_parameters': da_lpar.to_dict() + }, + 'minimum_illuminance_500': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Daylight Autonomy - minimum 500 lux').to_dict(), + 'unit': '%', + 'legend_parameters': da_lpar.to_dict() + }, + 'target_illuminance_300': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Daylight Autonomy - target 300 lux').to_dict(), + 'unit': '%', + 'legend_parameters': da_lpar.to_dict() + }, + 'target_illuminance_500': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Daylight Autonomy - target 500 lux').to_dict(), + 'unit': '%', + 'legend_parameters': da_lpar.to_dict() + }, + 'target_illuminance_750': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Daylight Autonomy - target 750 lux').to_dict(), + 'unit': '%', + 'legend_parameters': da_lpar.to_dict() + } + } + + return metric_info_dict + + +def _annual_daylight_en17037_config(): + """Return vtk-config for annual daylight EN 17037. """ + cfg = { + "data": [ + { + "identifier": "Daylight Autonomy - target 300 lux", + "object_type": "grid", + "unit": "Percentage", + "path": "target_illuminance/minimum/da", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "nuanced", + }, + }, + { + "identifier": "Daylight Autonomy - target 500 lux", + "object_type": "grid", + "unit": "Percentage", + "path": "target_illuminance/medium/da", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "nuanced", + }, + }, + { + "identifier": "Daylight Autonomy - target 750 lux", + "object_type": "grid", + "unit": "Percentage", + "path": "target_illuminance/high/da", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "nuanced", + }, + }, + { + "identifier": "Daylight Autonomy - minimum 100 lux", + "object_type": "grid", + "unit": "Percentage", + "path": "minimum_illuminance/minimum/da", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "nuanced", + }, + }, + { + "identifier": "Daylight Autonomy - minimum 300 lux", + "object_type": "grid", + "unit": "Percentage", + "path": "minimum_illuminance/medium/da", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "nuanced", + }, + }, + { + "identifier": "Daylight Autonomy - minimum 500 lux", + "object_type": "grid", + "unit": "Percentage", + "path": "minimum_illuminance/high/da", + "hide": False, + "legend_parameters": { + "hide_legend": False, + "min": 0, + "max": 100, + "color_set": "nuanced", + }, + }, + ] + } + + return cfg +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/helper.html b/docs/_modules/honeybee_radiance_postprocess/helper.html new file mode 100644 index 00000000..698fc0ed --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/helper.html @@ -0,0 +1,930 @@ + + + + + + + honeybee_radiance_postprocess.helper — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.helper

+"""Helper functions."""
+import json
+import numpy as np
+from pathlib import Path
+
+from honeybee.model import Model
+
+
+
+[docs] +def model_grid_areas(model, grids_info): + if isinstance(model, Model): + hb_model = model + else: + hb_model = Model.from_file(model) + + full_ids = [grid_info['full_id'] for grid_info in grids_info] + sensor_grids = hb_model.properties.radiance.sensor_grids + grid_areas = [] + for s_grid in sensor_grids: + if s_grid.identifier in full_ids: + if s_grid.mesh is not None: + grid_areas.append(s_grid.mesh.face_areas) + grid_areas = [np.array(grid) for grid in grid_areas] + if not grid_areas: + grid_areas = [None] * len(full_ids) + + return grid_areas
+ + + +
+[docs] +def grid_summary( + folder: Path, grid_areas: list = None, + grids_info: list = None, name: str = 'grid_summary', + grid_metrics: list = None, sub_folder: bool = True + ): + """Calculate a grid summary for a single metric. + + Args: + folder: A folder with results. + grid_areas: A list of area of each sensor. + grids_info: Grid information as a dictionary. + name: Optional filename of grid summary. + grid_metrics: Additional customized metrics to calculate. + sub_folder: If set to True it will look for results in all sub-folders + in the folder input. Else it look for results directly in the folder + input. + """ + if sub_folder: + sub_folders = [sf for sf in folder.iterdir() if sf.is_dir()] + else: + sub_folders = [folder] + + # set up the default data types + dtype_sensor_grid = ('Sensor Grid', 'O') + dtype_sensor_grid_id = ('Sensor Grid ID', 'O') + dtype_base = [ + ('Mean', np.float32), + ('Minimum', np.float32), + ('Maximum', np.float32), + ('Uniformity Ratio', np.float32) + ] + dtype = [] + + # set up default format (for first two columns: str) + fmt = ['%s', '%s'] + + if grids_info is None: + for sf in sub_folders: + gi_file = sf.joinpath('grids_info.json') + if gi_file.exists(): + with open(gi_file) as gi: + grids_info = json.load(gi) + break + if grids_info is None: + # if it did not find grids_info.json in any folder + raise FileNotFoundError( + f'The file grids_info.json was not found in any folder.') + + if grid_areas is None: + grid_areas = [None] * len(grids_info) + + + dtype.append(dtype_sensor_grid) + dtype.append(dtype_sensor_grid_id) + for sf in sub_folders: + _dtype = [] + _fmt = [] + for dt_b in dtype_base: + col_name = dt_b[0] + if sub_folder: + col_name = '-'.join([sf.stem.upper(), col_name]) + _dtype.append((col_name, np.float32)) + _fmt.append('%.2f') + dtype.extend(_dtype) + fmt.extend(_fmt) + + if grid_metrics is not None: + for grid_metric in grid_metrics: + if len(grid_metric) == 1: + if 'allOf' in grid_metric: + _mname = [] + for gr_m in grid_metric['allOf']: + _mname.append(_get_grid_metric_name(gr_m)) + mname = ' and '.join(_mname) + elif 'anyOf' in grid_metric: + _mname = [] + for gr_m in grid_metric['anyOf']: + _mname.append(_get_grid_metric_name(gr_m)) + mname = ' or '.join(_mname) + else: + mname = _get_grid_metric_name(grid_metric) + elif len(grid_metric) == 2: + _mname = [] + for k, v in grid_metric.items(): + _mname.append(_get_grid_metric_name({k: v})) + mname = ' and '.join(_mname) + col_name = mname + if sub_folder: + col_name = '-'.join([sf.stem.upper(), col_name]) + dtype.append((col_name, np.float32)) + fmt.append('%.2f') + + arrays = [] + for grid_info, grid_area in zip(grids_info, grid_areas): + full_id = grid_info['full_id'] + grid_name = grid_info['name'] + data = [grid_name, full_id] + for sf in sub_folders: + grid_files = list(sf.glob(f'{full_id}.*')) + assert len(grid_files) == 1 + + array = np.loadtxt(grid_files[0]) + _mean = array.mean() + _min = array.min() + _max = array.max() + _uniformity_ratio = _min / _mean * 100 + + data.extend([_mean, _min, _max, _uniformity_ratio]) + + if grid_metrics is not None: + # get grid metrics + grid_metrics_data = \ + _get_grid_metrics(array, grid_metrics, grid_info, grid_area) + data.extend(grid_metrics_data) + + arrays.append(tuple(data)) + + # create structured array + struct_array = np.array(arrays, dtype=dtype) + + header = [dt[0] for dt in dtype] + # write header to file + with open(folder.joinpath(f'{name}.csv'), 'w') as grid_summary_file: + grid_summary_file.write(','.join(header)) + # write structured array to grid_summary_file + with open(folder.joinpath(f'{name}.csv'), 'a') as grid_summary_file: + grid_summary_file.write('\n') + np.savetxt(grid_summary_file, struct_array, delimiter=',', fmt=fmt) + + return grid_summary_file
+ + + +def _calculate_percentage(gr_metric_bool, grid_info, grid_area=None): + """Calculate percentage of floor area where True. + + Args: + gr_metric_bool: A NumPy array of booleans. + grid_info: Grid information. + grid_area: A NumPy array of area for each sensor. (Default: None). + + Returns: + The percentage of floor area where gr_metric_bool is True. + """ + if grid_area is not None: + gr_metric_pct = \ + grid_area[gr_metric_bool].sum() / grid_area.sum() * 100 + else: + gr_metric_pct = \ + gr_metric_bool.sum() / grid_info['count'] * 100 + return gr_metric_pct + + +def _logical_operator(keyword): + lg = { + 'minimum': '>', + 'exclusiveMinimum': '>=', + 'maximum': '<', + 'exclusiveMaximum': '<=' + } + return lg[keyword] + + +def _get_grid_metric_name(grid_metric): + if 'minimum' in grid_metric: + return f'{_logical_operator("minimum")}{grid_metric["minimum"]}' + elif 'exclusiveMinimum' in grid_metric: + return f'{_logical_operator("exclusiveMinimum")}{grid_metric["exclusiveMinimum"]}' + elif 'maximum' in grid_metric: + return f'{_logical_operator("maximum")}{grid_metric["maximum"]}' + elif 'exclusiveMaximum' in grid_metric: + return f'{_logical_operator("exclusiveMaximum")}{grid_metric["exclusiveMaximum"]}' + + +def _numeric_type(array, gr_metric): + if 'minimum' in gr_metric: + gr_metric_bool = array > gr_metric['minimum'] + elif 'exclusiveMinimum' in gr_metric: + gr_metric_bool = array >= gr_metric['minimum'] + elif 'maximum' in gr_metric: + gr_metric_bool = array < gr_metric['maximum'] + elif 'exclusiveMaximum' in gr_metric: + gr_metric_bool = array <= gr_metric['exclusiveMaximum'] + return gr_metric_bool + + +def _grid_summary_all_any(array, gr_metric, grid_info, grid_area, keyword): + gr_metric_arrays = [] + for gr_m in gr_metric[keyword]: + assert len(gr_m) == 1 + gr_metric_arrays.append(_numeric_type(array, gr_m)) + if keyword == 'allOf': + gr_metric_bool = np.all(gr_metric_arrays, axis=0) + else: + gr_metric_bool = np.any(gr_metric_arrays, axis=0) + gr_metric_pct = \ + _calculate_percentage(gr_metric_bool, grid_info, grid_area) + return gr_metric_pct + + +def _get_grid_metrics(array, grid_metrics, grid_info, grid_area): + grid_metrics_data = [] + for gr_metric in grid_metrics: + if len(gr_metric) == 1: + if 'allOf' in gr_metric: + gr_metric_pct = \ + _grid_summary_all_any( + array, gr_metric, grid_info, grid_area, 'allOf') + elif 'anyOf' in gr_metric: + gr_metric_pct = \ + _grid_summary_all_any( + array, gr_metric, grid_info, grid_area, 'anyOf') + else: + gr_metric_bool = _numeric_type(array, gr_metric) + gr_metric_pct = \ + _calculate_percentage(gr_metric_bool, grid_info, grid_area) + elif len(gr_metric) == 2: + gr_metric_arrays = [] + for k, threshold in gr_metric.items(): + gr_metric_arrays.append(_numeric_type(array, {k: threshold})) + gr_metric_bool = np.all(gr_metric_arrays, axis=0) + gr_metric_pct = \ + _calculate_percentage(gr_metric_bool, grid_info, grid_area) + grid_metrics_data.append(gr_metric_pct) + return grid_metrics_data +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/ies/lm.html b/docs/_modules/honeybee_radiance_postprocess/ies/lm.html new file mode 100644 index 00000000..5e81a2a2 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/ies/lm.html @@ -0,0 +1,892 @@ + + + + + + + honeybee_radiance_postprocess.ies.lm — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.ies.lm

+"""Functions for IES LM post-processing."""
+from typing import Tuple, Union
+from pathlib import Path
+from collections import defaultdict
+import json
+import itertools
+import numpy as np
+
+from ladybug.analysisperiod import AnalysisPeriod
+from ladybug.datatype.generic import GenericType
+from ladybug.color import Colorset
+from ladybug.datacollection import HourlyContinuousCollection
+from ladybug.datatype.fraction import Fraction
+from ladybug.datatype.time import Time
+from ladybug.legend import LegendParameters
+from ladybug.header import Header
+from honeybee.model import Model
+from honeybee.units import conversion_factor_to_meters
+from honeybee_radiance.writer import _filter_by_pattern
+from honeybee_radiance.postprocess.annual import filter_schedule_by_hours
+
+from ..metrics import da_array2d, ase_array2d
+from ..annual import schedule_to_hoys, occupancy_schedule_8_to_6
+from ..results.annual_daylight import AnnualDaylight
+from ..util import filter_array, recursive_dict_merge
+from ..dynamic import DynamicSchedule, ApertureGroupSchedule
+from .lm_schedule import shd_trans_schedule_descending, states_schedule_descending
+
+
+
+[docs] +def shade_transmittance_per_light_path( + light_paths: list, shade_transmittance: Union[float, dict], + shd_trans_dict: dict) -> dict: + """Filter shade_transmittance by light paths and add default multiplier. + + Args: + light_paths: A list of light paths. + shade_transmittance: A value to use as a multiplier in place of solar + shading. This input can be either a single value that will be used + for all aperture groups, or a dictionary where aperture groups are + keys, and the value for each key is the shade transmittance. Values + for shade transmittance must be 1 > value > 0. + shd_trans_dict: A dictionary used to store shade transmittance value + for each aperture group. + + Returns: + A dictionary with filtered light paths. + """ + shade_transmittances = {} + if isinstance(shade_transmittance, dict): + for light_path in light_paths: + # default multiplier + shade_transmittances[light_path] = [1] + # add custom shade transmittance + if light_path in shade_transmittance: + shade_transmittances[light_path].append( + shade_transmittance[light_path]) + shd_trans_dict[light_path] = shade_transmittance[light_path] + # add default shade transmittance (0.02) + elif light_path != '__static_apertures__': + shade_transmittances[light_path].append(0.02) + shd_trans_dict[light_path] = 0.02 + else: + shade_transmittances[light_path].append(1) + shd_trans_dict[light_path] = 1 + else: + shd_trans = float(shade_transmittance) + for light_path in light_paths: + # default multiplier + shade_transmittances[light_path] = [1] + # add custom shade transmittance + if light_path != '__static_apertures__': + shade_transmittances[light_path].append(shd_trans) + shd_trans_dict[light_path] = shd_trans + else: + shade_transmittances[light_path].append(1) + shd_trans_dict[light_path] = 1 + + return shade_transmittances, shd_trans_dict
+ + + +
+[docs] +def dynamic_schedule_direct_illuminance( + results: Union[str, AnnualDaylight], grids_filter: str = '*', + shade_transmittance: Union[float, dict] = 0.02, + use_states: bool = False + ) -> Tuple[dict, dict]: + """Calculate a schedule of each aperture group. + + This function calculates an annual shading schedule of each aperture + group. Hour by hour it will select the least shaded aperture group + configuration, so that no more than 2% of the sensors points receive + direct illuminance of 1000 lux or more. + + Args: + results: Path to results folder or a Results class object. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + shade_transmittance: A value to use as a multiplier in place of solar + shading. This input can be either a single value that will be used + for all aperture groups, or a dictionary where aperture groups are + keys, and the value for each key is the shade transmittance. Values + for shade transmittance must be 1 > value > 0. + Defaults to 0.02. + use_states: A boolean to note whether to use the simulated states. Set + to True to use the simulated states. The default is False which will + use the shade transmittance instead. + + Returns: + Tuple: A tuple with a dictionary of the annual schedule and a + dictionary of hours where no shading configuration comply with the + 2% rule. + """ + if not isinstance(results, AnnualDaylight): + results = AnnualDaylight(results) + + grids_info = results._filter_grids(grids_filter=grids_filter) + schedule = occupancy_schedule_8_to_6(as_list=True) + occ_pattern = \ + filter_schedule_by_hours(results.sun_up_hours, schedule=schedule)[0] + occ_mask = np.array(occ_pattern) + + states_schedule = defaultdict(list) + fail_to_comply = {} + shd_trans_dict = {} + + for grid_info in grids_info: + grid_count = grid_info['count'] + light_paths = [lp[0] for lp in grid_info['light_path']] + + shade_transmittances, shd_trans_dict = ( + shade_transmittance_per_light_path( + light_paths, shade_transmittance, shd_trans_dict + ) + ) + + if len(light_paths) > 6: + if use_states: + states_schedule, fail_to_comply = states_schedule_descending( + results, grid_info, light_paths, occ_mask, + states_schedule, fail_to_comply) + else: + states_schedule, fail_to_comply = shd_trans_schedule_descending( + results, grid_info, light_paths, shade_transmittances, occ_mask, + states_schedule, fail_to_comply) + else: + if use_states: + combinations = results._get_state_combinations(grid_info) + else: + shade_transmittances, shd_trans_dict = shade_transmittance_per_light_path( + light_paths, shade_transmittance, shd_trans_dict) + keys, values = zip(*shade_transmittances.items()) + combinations = [dict(zip(keys, v)) for v in itertools.product(*values)] + + array_list_combinations = [] + for combination in combinations: + combination_arrays = [] + for light_path, value in combination.items(): + if use_states: + combination_arrays.append( + results._get_array(grid_info, light_path, state=value, + res_type='direct') + ) + else: + array = results._get_array( + grid_info, light_path, res_type='direct') + if value == 1: + combination_arrays.append(array) + else: + combination_arrays.append(array * value) + combination_array = sum(combination_arrays) + + combination_percentage = \ + (combination_array >= 1000).sum(axis=0) / grid_count + array_list_combinations.append(combination_percentage) + array_combinations = np.array(array_list_combinations) + array_combinations[array_combinations > 0.02] = -np.inf + + grid_comply = np.where(np.all(array_combinations==-np.inf, axis=0))[0] + if grid_comply.size != 0: + grid_comply = np.array(results.sun_up_hours)[grid_comply] + fail_to_comply[grid_info['name']] = \ + [int(hoy) for hoy in grid_comply] + + array_combinations_filter = np.apply_along_axis( + filter_array, 1, array_combinations, occ_mask + ) + max_indices = array_combinations_filter.argmax(axis=0) + # select the combination for each hour + combinations = [combinations[idx] for idx in max_indices] + # merge the combinations of dicts + for combination in combinations: + for light_path, value in combination.items(): + if light_path != '__static_apertures__': + states_schedule[light_path].append(value) + + occupancy_hoys = schedule_to_hoys(schedule, results.sun_up_hours) + + # map states to 8760 values + if use_states: + aperture_group_schedules = [] + for identifier, values in states_schedule.items(): + mapped_states = results.values_to_annual( + occupancy_hoys, values, results.timestep, dtype=np.int32) + aperture_group_schedules.append( + ApertureGroupSchedule(identifier, mapped_states.tolist()) + ) + states_schedule = \ + DynamicSchedule.from_group_schedules(aperture_group_schedules) + else: + for light_path, shd_trans in states_schedule.items(): + mapped_states = results.values_to_annual( + occupancy_hoys, shd_trans, results.timestep) + states_schedule[light_path] = mapped_states + + return states_schedule, fail_to_comply, shd_trans_dict
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/ies/lm_schedule.html b/docs/_modules/honeybee_radiance_postprocess/ies/lm_schedule.html new file mode 100644 index 00000000..36a61396 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/ies/lm_schedule.html @@ -0,0 +1,921 @@ + + + + + + + honeybee_radiance_postprocess.ies.lm_schedule — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.ies.lm_schedule

+"""Module for dynamic LM schedules."""
+from typing import Tuple
+import numpy as np
+
+from ..results.annual_daylight import AnnualDaylight
+from ..util import filter_array
+
+
+
+[docs] +def shd_trans_schedule_descending( + results: AnnualDaylight, grid_info, light_paths, shade_transmittances, occ_mask, + states_schedule, fail_to_comply + ) -> Tuple[dict, dict]: + grid_count = grid_info['count'] + full_direct = [] + full_thresh = [] + full_shd_trans_array = [] + for light_path in light_paths: + array = results._get_array(grid_info, light_path, res_type="direct") + array = np.apply_along_axis(filter_array, 1, array, occ_mask) + full_direct.append(array) + full_thresh.append((array >= 1000).sum(axis=0)) + full_shd_trans_array.append(shade_transmittances[light_path][1]) + + # Sum the array element-wise. + # This array is the sum of all direct illuminance without shade + # transmittance. + full_direct_sum = sum(full_direct) + + # Create base list of shading combinations (all set to 1). + # We will replace the 1s later. + combinations = [ + {light_path: 1 for light_path in light_paths} + for i in range(full_direct_sum.shape[1]) + ] + + # Find the percentage of floor area >= 1000 lux. + # This array is the percentage for each hour (axis=0). + direct_pct_above = (full_direct_sum >= 1000).sum(axis=0) / grid_count + + # Find the indices where the percentage of floor area is > 2%. + # This array is the problematic hours. + above_2_indices = np.where(direct_pct_above > 0.02)[0] + + # Use the indices to get the relevant hours. + direct_sum = np.take(full_direct_sum, above_2_indices, axis=1) + + # Use the indices to get the relevant hours. + direct = np.take(full_direct, above_2_indices, axis=2) + + # Use the indices to get the relevant hours. + thresh = np.take(full_thresh, above_2_indices, axis=1) + + # Sort and get indices. Negate the array to get descending order. + # Descending order puts the "highest offender" light path first. + sort_thresh = np.argsort(-thresh, axis=0).transpose() + + _combinations = [] + _combinations.insert( + 0, (np.arange(full_direct_sum.shape[1]), combinations) + ) + + if np.any(above_2_indices): + # There are hours where the percentage of floor area is > 2%. + for idx, lp in enumerate(light_paths): + # Take column. For each iteration it will take the next column + # in descending order, i.e., the "highest offender" is the first + # column. + sort_indices = np.take(sort_thresh, idx, axis=1) + + # Map light path identifiers to indices. + light_path_ids = np.take(light_paths, sort_indices) + + # Map shade transmittance to indices. + shd_trans_array = np.take(full_shd_trans_array, sort_indices) + + # Create combination for the subset. + _subset_combination = [ + {light_path: _shd_trans} for light_path, _shd_trans in + zip(light_path_ids, shd_trans_array) + ] + _combinations.insert(0, (above_2_indices, _subset_combination)) + + # Take the values from each array by indexing. + direct_array = \ + direct[sort_indices, :, range(len(sort_indices))].transpose() + + # Subtract the illuminance values. + direct_sum = direct_sum - (direct_array * (1 - shd_trans_array)) + + # Find the percentage of floor area >= 1000 lux. + direct_pct_above = (direct_sum >= 1000).sum(axis=0) / grid_count + + # Find the indices where the percentage of floor area is > 2%. + above_2_indices = np.where(direct_pct_above > 0.02)[0] + + # Break if there are no hours above 2%. + if not np.any(above_2_indices): + break + + # Update variables for the next iteration. + direct_sum = np.take(direct_sum, above_2_indices, axis=1) + direct = np.take(direct, above_2_indices, axis=2) + thresh = np.take(thresh, above_2_indices, axis=1) + sort_thresh = np.take(sort_thresh, above_2_indices, axis=0) + + if np.any(above_2_indices): + # There are hours not complying with the 2% rule. + previous_indices = [] + previous_combination = [] + grid_comply = [] + # Merge the combinations from the iterations of the subsets. + for i, subset in enumerate(_combinations): + if i == 0: + previous_indices = subset[0] + else: + _indices = subset[0] + grid_comply = [] + for _pr_idx in previous_indices: + grid_comply.append(_indices[_pr_idx]) + previous_indices = grid_comply + # Convert indices to sun up hours indices. + filter_indices = np.where(occ_mask.astype(bool))[0] + grid_comply = [filter_indices[_gc] for _gc in grid_comply] + grid_comply = np.array(results.sun_up_hours)[grid_comply] + fail_to_comply[grid_info['name']] = \ + [int(hoy) for hoy in grid_comply] + + previous_indices = None + previous_combination = None + # Merge the combinations from the iterations of the subsets. + for i, subset in enumerate(_combinations): + if i == 0: + previous_indices, previous_combination = subset + else: + _indices, _combination = subset + for _pr_idx, _pr_comb in \ + zip(previous_indices, previous_combination): + for light_path, _shd_trans in _pr_comb.items(): + _combination[_pr_idx][light_path] = _shd_trans + previous_indices = _indices + previous_combination = _combination + + combinations = _combination + + # Merge the combinations of dicts. + for combination in combinations: + for light_path, shd_trans in combination.items(): + if light_path != "__static_apertures__": + states_schedule[light_path].append(shd_trans) + + return states_schedule, fail_to_comply
+ + + +
+[docs] +def states_schedule_descending( + results: AnnualDaylight, grid_info, light_paths, occ_mask, + states_schedule, fail_to_comply + ) -> Tuple[dict, dict]: + grid_count = grid_info['count'] + full_direct = [] + full_thresh = [] + full_direct_blinds = [] + for light_path in light_paths: + array = results._get_array( + grid_info, light_path, state=0, res_type="direct") + array = np.apply_along_axis(filter_array, 1, array, occ_mask) + full_direct.append(array) + full_thresh.append((array >= 1000).sum(axis=0)) + + array = results._get_array( + grid_info, light_path, state=1, res_type="direct") + array = np.apply_along_axis(filter_array, 1, array, occ_mask) + full_direct_blinds.append(array) + + full_direct = np.array(full_direct) + full_direct_blinds = np.array(full_direct_blinds) + full_direct_sum = full_direct.sum(axis=0) + + new_array = full_direct.copy() + + percentage_sensors = (full_direct_sum >= 1000).sum(axis=0) / grid_count + if not np.any(percentage_sensors > 0.02): + combinations = [ + {light_path: 0 for light_path in light_paths} + for i in range(full_direct_sum.shape[1])] + else: + tracking_array = np.zeros( + (new_array.shape[0], new_array.shape[2]), dtype=int) + + percentage_sensors = (full_direct >= 1000).sum(axis=1) / grid_count + + ranking_indices = np.argsort(-percentage_sensors, axis=0) + + for rank in range(ranking_indices.shape[0]): + # Calculate the percentage of sensors with values >= 1000 for the current new_array + summed_array = np.sum(new_array, axis=0) + percentage_sensors_summed = np.sum( + summed_array >= 1000, axis=0) / grid_count + indices_above_2_percent = np.where( + percentage_sensors_summed > 0.02)[0] + + # Exit if there are no more hours exceeding the threshold + if len(indices_above_2_percent) == 0: + break + + # Array indices to use for replacement for these hours + replace_indices = indices_above_2_percent + array_indices = ranking_indices[rank, replace_indices] + + # Use advanced indexing to replace values in new_array for these hours + for hour_idx, array_idx in zip(replace_indices, array_indices): + new_array[array_idx, :, hour_idx] = full_direct_blinds[ + array_idx, :, hour_idx + ] + + # Update the tracking array + tracking_array[array_indices, replace_indices] = 1 + + combinations = [] + for hour in range(new_array.shape[2]): + hour_dict = { + light_paths[i]: tracking_array[i, hour] + for i in range(tracking_array.shape[0])} + combinations.append(hour_dict) + + final_summed_array = np.sum(new_array, axis=0) + final_percentage_sensors_summed = ( + final_summed_array >= 1000).sum( + axis=0) / grid_count + final_indices_above_2_percent = np.where( + final_percentage_sensors_summed > 0.02)[0] + if np.any(final_indices_above_2_percent): + sun_up_hours_indices = np.where(occ_mask == 1)[0][ + final_indices_above_2_percent] + grid_comply = np.array(results.sun_up_hours)[sun_up_hours_indices] + fail_to_comply[grid_info['name']] = [ + int(hoy) for hoy in grid_comply] + + for combination in combinations: + for light_path, value in combination.items(): + if light_path != '__static_apertures__': + states_schedule[light_path].append(value) + + return states_schedule, fail_to_comply
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/leed/leed.html b/docs/_modules/honeybee_radiance_postprocess/leed/leed.html new file mode 100644 index 00000000..b4c6ada1 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/leed/leed.html @@ -0,0 +1,1423 @@ + + + + + + + honeybee_radiance_postprocess.leed.leed — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.leed.leed

+"""Functions for LEED post-processing."""
+from typing import Tuple, Union
+from pathlib import Path
+from collections import defaultdict
+import json
+import itertools
+import numpy as np
+
+from ladybug.analysisperiod import AnalysisPeriod
+from ladybug.datatype.generic import GenericType
+from ladybug.color import Colorset
+from ladybug.datacollection import HourlyContinuousCollection
+from ladybug.datatype.fraction import Fraction
+from ladybug.datatype.time import Time
+from ladybug.legend import LegendParameters
+from ladybug.header import Header
+from honeybee.model import Model
+from honeybee.units import conversion_factor_to_meters
+from honeybee_radiance.writer import _filter_by_pattern
+from honeybee_radiance.postprocess.annual import filter_schedule_by_hours
+
+from ..metrics import da_array2d, ase_array2d
+from ..annual import schedule_to_hoys, occupancy_schedule_8_to_6
+from ..results.annual_daylight import AnnualDaylight
+from ..util import filter_array, recursive_dict_merge
+from ..dynamic import DynamicSchedule, ApertureGroupSchedule
+from .leed_schedule import shd_trans_schedule_descending, states_schedule_descending
+
+
+def _create_grid_summary(
+    grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid, ase_grid,
+    pass_sda, pass_ase, total_floor, area_weighted=True):
+    """Create a LEED summary for a single grid.
+
+    Args:
+        grid_info: Grid information.
+        sda_grid: Spatial Daylight Autonomy.
+        ase_grid: Annual Sunlight Exposure.
+        pass_sda: The percentage of the sensor points or floor area that
+            passes sDA.
+        pass_ase: The percentage of the sensor points or floor area that
+            passes ASE.
+        total_floor: The number of sensor points or floor area.
+        area_weighted: Boolean to determine if the results are area
+            weighted. Defaults to True.
+
+    Returns:
+        Tuple:
+        -   summary_grid: Summary of each grid individually.
+    """
+    grid_id = grid_info['full_id']
+    grid_name = grid_info['name']
+    grid_summary = {
+        grid_id: {}
+    }
+    if ase_grid > 10:
+        ase_note = (
+            'The Annual Sunlight Exposure is greater than 10% for space: '
+            f'{grid_name}. Identify in writing how the space is designed to '
+            'address glare.'
+        )
+        grid_summary[grid_id]['ase_note'] = ase_note
+
+    if area_weighted:
+        _grid_summary = {
+            grid_id: {
+                'name': grid_name,
+                'full_id': grid_id,
+                'ase': round(ase_grid, 2),
+                'sda': round(sda_grid, 2),
+                'sda_blinds_up': round(sda_blinds_up_grid, 2),
+                'sda_blinds_down': round(sda_blinds_down_grid, 2),
+                'floor_area_passing_ase': round(pass_ase, 2),
+                'floor_area_passing_sda': round(pass_sda, 2),
+                'total_floor_area': round(total_floor, 2)
+            }
+        }
+    else:
+        _grid_summary = {
+            grid_id: {
+                'name': grid_name,
+                'full_id': grid_id,
+                'ase': round(ase_grid, 2),
+                'sda': round(sda_grid, 2),
+                'sda_blinds_up': round(sda_blinds_up_grid, 2),
+                'sda_blinds_down': round(sda_blinds_down_grid, 2),
+                'sensor_count_passing_ase': int(round(pass_ase, 2)),
+                'sensor_count_passing_sda': int(round(pass_sda, 2)),
+                'total_sensor_count': total_floor
+            }
+        }
+
+    recursive_dict_merge(grid_summary, _grid_summary)
+
+    return grid_summary
+
+
+def _leed_summary(
+    pass_ase_grids: list, pass_sda_grids: list, grids_info: list,
+    grid_areas: list, pass_sda_blinds_up_grids: list,
+    pass_sda_blinds_down_grids: list) -> Tuple[dict, dict]:
+    """Create combined summary and summary for each grid individually.
+
+    Args:
+        pass_ase_grids: A list where each sublist is a list of True/False that
+            tells if each sensor point passes ASE.
+        pass_sda_grids: A list where each sublist is a list of True/False that
+            tells if each sensor point passes sDA.
+        grids_info: A list of grid information.
+        grid_areas: A list where each sublist is the area of each sensor point.
+            The alternative is a list of None values for each grid information.
+
+    Returns:
+        Tuple:
+        -   summary: Summary of of all grids combined.
+        -   summary_grid: Summary of each grid individually.
+    """
+    summary = {}
+    summary_grid = {}
+
+    if all(grid_area is not None for grid_area in grid_areas):
+        # weighted by mesh face area
+        total_area = 0
+        total_area_pass_ase = 0
+        total_area_pass_sda = 0
+        for (pass_ase, pass_sda, grid_area, grid_info, pass_sda_blinds_up,
+             pass_sda_blinds_down) in \
+            zip(pass_ase_grids, pass_sda_grids, grid_areas, grids_info,
+                pass_sda_blinds_up_grids, pass_sda_blinds_down_grids):
+            total_grid_area = grid_area.sum()
+
+            area_pass_ase = grid_area[pass_ase].sum()
+            ase_grid = (total_grid_area - area_pass_ase) / total_grid_area * 100
+
+            area_pass_sda = grid_area[pass_sda].sum()
+            area_pass_sda_blind_up = grid_area[pass_sda_blinds_up].sum()
+            area_pass_sda_blinds_down = grid_area[pass_sda_blinds_down].sum()
+            sda_grid = area_pass_sda / total_grid_area * 100
+            sda_blinds_up_grid = area_pass_sda_blind_up / total_grid_area * 100
+            sda_blinds_down_grid = area_pass_sda_blinds_down / total_grid_area * 100
+
+            # grid summary
+            grid_summary = \
+                _create_grid_summary(
+                    grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid,
+                    ase_grid, area_pass_sda, area_pass_ase, total_grid_area,
+                    area_weighted=True
+                )
+
+            recursive_dict_merge(summary_grid, grid_summary)
+
+            total_area += total_grid_area
+            total_area_pass_ase += area_pass_ase
+            total_area_pass_sda += area_pass_sda
+
+        summary['ase'] = round((total_area - total_area_pass_ase) / total_area * 100, 2)
+        summary['sda'] = round(total_area_pass_sda / total_area * 100, 2)
+        summary['floor_area_passing_ase'] = total_area_pass_ase
+        summary['floor_area_passing_sda'] = total_area_pass_sda
+        summary['total_floor_area'] = total_area
+    else:
+        # assume all sensor points cover the same area
+        total_sensor_count = 0
+        total_sensor_count_pass_ase = 0
+        total_sensor_count_pass_sda = 0
+        for (pass_ase, pass_sda, grid_info, pass_sda_blinds_up,
+             pass_sda_blinds_down) in \
+            zip(pass_ase_grids, pass_sda_grids, grids_info,
+                pass_sda_blinds_up_grids, pass_sda_blinds_down_grids):
+            grid_count = grid_info['count']
+            sensor_count_pass_ase = pass_ase.sum()
+            ase_grid = (grid_count - sensor_count_pass_ase) / grid_count * 100
+
+            sensor_count_pass_sda = pass_sda.sum()
+            sensor_count_pass_sda_blinds_up = pass_sda_blinds_up.sum()
+            sensor_count_pass_sda_blinds_down = pass_sda_blinds_down.sum()
+            sda_grid = sensor_count_pass_sda / grid_count * 100
+            sda_blinds_up_grid = sensor_count_pass_sda_blinds_up / grid_count * 100
+            sda_blinds_down_grid = sensor_count_pass_sda_blinds_down / grid_count * 100
+
+            # grid summary
+            grid_summary = \
+                _create_grid_summary(
+                    grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid,
+                    ase_grid, sensor_count_pass_sda, sensor_count_pass_ase,
+                    grid_count, area_weighted=False
+                )
+
+            recursive_dict_merge(summary_grid, grid_summary)
+
+            total_sensor_count += grid_count
+            total_sensor_count_pass_ase += sensor_count_pass_ase
+            total_sensor_count_pass_sda += sensor_count_pass_sda
+
+        summary['ase'] = round((total_sensor_count - total_sensor_count_pass_ase) /
+            total_sensor_count * 100, 2
+        )
+        summary['sda'] = round(total_sensor_count_pass_sda / total_sensor_count * 100, 2)
+        summary['sensor_count_passing_ase'] = int(total_sensor_count_pass_ase)
+        summary['sensor_count_passing_sda'] = int(total_sensor_count_pass_sda)
+        summary['total_sensor_count'] = total_sensor_count
+
+    return summary, summary_grid
+
+
+def _ase_hourly_percentage(
+    results: AnnualDaylight, array: np.ndarray, grid_info: dict,
+    direct_threshold: float = 1000, grid_area: Union[None, np.ndarray] = None
+    ) -> np.ndarray:
+    """Calculate the percentage of floor area that receives greater than 1000
+    direct lux for each hour.
+
+    Args:
+        results: A Results object.
+        array: A NumPy array of the grid to process.
+        grid_info: Grid information of the grid to process..
+        direct_threshold: Direct threshold.
+        grid_area: Grid area as a NumPy array with a area value for each sensor
+            point, or a None value if there is no area associated with the
+            sensor point.
+
+    Returns:
+        A hourly data collection of the percentage of floor area that receives
+        greater than 1000 direct lux.
+    """
+    if grid_area is not None:
+        grid_area_2d = np.array([grid_area] * array.shape[1]).transpose()
+        area_above = \
+            np.where((array > direct_threshold), grid_area_2d, 0).sum(axis=0)
+        percentage_above = area_above / grid_area.sum() * 100
+    else:
+        percentage_above = \
+            (array > direct_threshold).sum(axis=0) / grid_info['count'] * 100
+
+    occupancy_hoys = schedule_to_hoys(results.schedule, results.sun_up_hours)
+    # map states to 8760 values
+    percentage_above = results.values_to_annual(
+        occupancy_hoys, percentage_above, results.timestep)
+    header = Header(Fraction('Percentage above 1000 direct lux'), '%',
+                    AnalysisPeriod(results.timestep),
+                    metadata={'SensorGrid': grid_info['name']})
+    data_collection = HourlyContinuousCollection(header, percentage_above.tolist())
+
+    return data_collection
+
+
+[docs] +def shade_transmittance_per_light_path( + light_paths: list, shade_transmittance: Union[float, dict], + shd_trans_dict: dict) -> dict: + """Filter shade_transmittance by light paths and add default multiplier. + + Args: + light_paths: A list of light paths. + shade_transmittance: A value to use as a multiplier in place of solar + shading. This input can be either a single value that will be used + for all aperture groups, or a dictionary where aperture groups are + keys, and the value for each key is the shade transmittance. Values + for shade transmittance must be 1 > value > 0. + shd_trans_dict: A dictionary used to store shade transmittance value + for each aperture group. + + Returns: + A dictionary with filtered light paths. + """ + shade_transmittances = {} + if isinstance(shade_transmittance, dict): + for light_path in light_paths: + # default multiplier + shade_transmittances[light_path] = [1] + # add custom shade transmittance + if light_path in shade_transmittance: + shade_transmittances[light_path].append( + shade_transmittance[light_path]) + shd_trans_dict[light_path] = shade_transmittance[light_path] + # add default shade transmittance (0.05) + elif light_path != '__static_apertures__': + shade_transmittances[light_path].append(0.05) + shd_trans_dict[light_path] = 0.05 + else: + shade_transmittances[light_path].append(1) + shd_trans_dict[light_path] = 1 + else: + shd_trans = float(shade_transmittance) + for light_path in light_paths: + # default multiplier + shade_transmittances[light_path] = [1] + # add custom shade transmittance + if light_path != '__static_apertures__': + shade_transmittances[light_path].append(shd_trans) + shd_trans_dict[light_path] = shd_trans + else: + shade_transmittances[light_path].append(1) + shd_trans_dict[light_path] = 1 + + return shade_transmittances, shd_trans_dict
+ + + +
+[docs] +def leed_states_schedule( + results: Union[str, AnnualDaylight], grids_filter: str = '*', + shade_transmittance: Union[float, dict] = 0.05, + use_states: bool = False + ) -> Tuple[dict, dict]: + """Calculate a schedule of each aperture group for LEED compliant sDA. + + This function calculates an annual shading schedule of each aperture + group. Hour by hour it will select the least shaded aperture group + configuration, so that no more than 2% of the sensors points receive + direct illuminance of 1000 lux or more. + + Args: + results: Path to results folder or a Results class object. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + shade_transmittance: A value to use as a multiplier in place of solar + shading. This input can be either a single value that will be used + for all aperture groups, or a dictionary where aperture groups are + keys, and the value for each key is the shade transmittance. Values + for shade transmittance must be 1 > value > 0. + Defaults to 0.05. + use_states: A boolean to note whether to use the simulated states. Set + to True to use the simulated states. The default is False which will + use the shade transmittance instead. + + Returns: + Tuple: A tuple with a dictionary of the annual schedule and a + dictionary of hours where no shading configuration comply with the + 2% rule. + """ + if not isinstance(results, AnnualDaylight): + results = AnnualDaylight(results) + + grids_info = results._filter_grids(grids_filter=grids_filter) + schedule = occupancy_schedule_8_to_6(as_list=True) + occ_pattern = \ + filter_schedule_by_hours(results.sun_up_hours, schedule=schedule)[0] + occ_mask = np.array(occ_pattern) + + states_schedule = defaultdict(list) + fail_to_comply = {} + shd_trans_dict = {} + + for grid_info in grids_info: + grid_count = grid_info['count'] + light_paths = [lp[0] for lp in grid_info['light_path']] + + shade_transmittances, shd_trans_dict = ( + shade_transmittance_per_light_path( + light_paths, shade_transmittance, shd_trans_dict + ) + ) + + if len(light_paths) > 6: + if use_states: + states_schedule, fail_to_comply = states_schedule_descending( + results, grid_info, light_paths, occ_mask, + states_schedule, fail_to_comply) + else: + states_schedule, fail_to_comply = shd_trans_schedule_descending( + results, grid_info, light_paths, shade_transmittances, occ_mask, + states_schedule, fail_to_comply) + else: + if use_states: + combinations = results._get_state_combinations(grid_info) + else: + shade_transmittances, shd_trans_dict = shade_transmittance_per_light_path( + light_paths, shade_transmittance, shd_trans_dict) + keys, values = zip(*shade_transmittances.items()) + combinations = [dict(zip(keys, v)) for v in itertools.product(*values)] + + array_list_combinations = [] + for combination in combinations: + combination_arrays = [] + for light_path, value in combination.items(): + if use_states: + combination_arrays.append( + results._get_array(grid_info, light_path, state=value, + res_type='direct') + ) + else: + array = results._get_array( + grid_info, light_path, res_type='direct') + if value == 1: + combination_arrays.append(array) + else: + combination_arrays.append(array * value) + combination_array = sum(combination_arrays) + + combination_percentage = \ + (combination_array >= 1000).sum(axis=0) / grid_count + array_list_combinations.append(combination_percentage) + array_combinations = np.array(array_list_combinations) + array_combinations[array_combinations > 0.02] = -np.inf + + grid_comply = np.where(np.all(array_combinations==-np.inf, axis=0))[0] + if grid_comply.size != 0: + grid_comply = np.array(results.sun_up_hours)[grid_comply] + fail_to_comply[grid_info['name']] = \ + [int(hoy) for hoy in grid_comply] + + array_combinations_filter = np.apply_along_axis( + filter_array, 1, array_combinations, occ_mask + ) + max_indices = array_combinations_filter.argmax(axis=0) + # select the combination for each hour + combinations = [combinations[idx] for idx in max_indices] + # merge the combinations of dicts + for combination in combinations: + for light_path, value in combination.items(): + if light_path != '__static_apertures__': + states_schedule[light_path].append(value) + + occupancy_hoys = schedule_to_hoys(schedule, results.sun_up_hours) + + # map states to 8760 values + if use_states: + aperture_group_schedules = [] + for identifier, values in states_schedule.items(): + mapped_states = results.values_to_annual( + occupancy_hoys, values, results.timestep, dtype=np.int32) + aperture_group_schedules.append( + ApertureGroupSchedule(identifier, mapped_states.tolist()) + ) + states_schedule = \ + DynamicSchedule.from_group_schedules(aperture_group_schedules) + else: + for light_path, shd_trans in states_schedule.items(): + mapped_states = results.values_to_annual( + occupancy_hoys, shd_trans, results.timestep) + states_schedule[light_path] = mapped_states + + return states_schedule, fail_to_comply, shd_trans_dict
+ + + +
+[docs] +def leed_option_one( + results: Union[str, AnnualDaylight], grids_filter: str = '*', + shade_transmittance: Union[float, dict] = 0.05, + use_states: bool = False, states_schedule: dict = None, + threshold: float = 300, direct_threshold: float = 1000, + occ_hours: int = 250, target_time: float = 50, sub_folder: str = None): + """Calculate credits for LEED v4.1 Daylight Option 1. + + Args: + results: Path to results folder or a Results class object. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + shade_transmittance: A value to use as a multiplier in place of solar + shading. This input can be either a single value that will be used + for all aperture groups, or a dictionary where aperture groups are + keys, and the value for each key is the shade transmittance. Values + for shade transmittance must be 1 > value > 0. + Defaults to 0.05. + use_states: A boolean to note whether to use the simulated states. Set + to True to use the simulated states. The default is False which will + use the shade transmittance instead. + states_schedule: A custom dictionary of shading states. In case this is + left empty, the function will calculate a shading schedule by using + the shade_transmittance input. If a states schedule is provided it + will check that it is complying with the 2% rule. Defaults to None. + threshold: Threshold value for daylight autonomy. Default: 300. + direct_threshold: The threshold that determines if a sensor is overlit. + Defaults to 1000. + occ_hours: The number of occupied hours that cannot receive more than + the direct_threshold. Defaults to 250. + target_time: A minimum threshold of occupied time (eg. 50% of the + time), above which a given sensor passes and contributes to the + spatial daylight autonomy. Defaults to 50. + sub_folder: Relative path for a subfolder to write the output. If None, + the files will not be written. Defaults to None. + + Returns: + Tuple: + - summary: Summary of all grids combined. + - summary_grid: Summary of each grid individually. + - da_grids: List of daylight autonomy values for each grid. Each item + in the list is a NumPy array of DA values. + - hours_above: List of hours above 1000 direct illuminance (with + default states) for each grid. Each item in the list is a NumPy + array of hours above 1000 lux. + - states_schedule: A dictionary of annual shading schedules for each + aperture group. + - grids_info: Grid information. + """ + # use default leed occupancy schedule + schedule = occupancy_schedule_8_to_6(as_list=True) + + if not isinstance(results, AnnualDaylight): + results = AnnualDaylight(results, schedule=schedule) + else: + # set schedule to default leed schedule + results.schedule = schedule + + occ_mask = results.occ_mask + total_occ = results.total_occ + + grids_info = results._filter_grids(grids_filter=grids_filter) + + if not states_schedule: + states_schedule, fail_to_comply, shd_trans_dict = \ + leed_states_schedule(results, grids_filter=grids_filter, + shade_transmittance=shade_transmittance, use_states=use_states) + else: + raise NotImplementedError( + 'Custom input for argument states_schedule is not yet implemented.' + ) + + # check to see if there is a HBJSON with sensor grid meshes for areas + grid_areas, units_conversion = [], 1 + for base_file in Path(results.folder).parent.iterdir(): + if base_file.suffix in ('.hbjson', '.hbpkl'): + hb_model = Model.from_file(base_file) + units_conversion = conversion_factor_to_meters(hb_model.units) + filt_grids = _filter_by_pattern( + hb_model.properties.radiance.sensor_grids, filter=grids_filter) + for s_grid in filt_grids: + if s_grid.mesh is not None: + grid_areas.append(s_grid.mesh.face_areas) + grid_areas = [np.array(grid) for grid in grid_areas] + if not grid_areas: + grid_areas = [None] * len(grids_info) + + # annual sunlight exposure + ase_grids = [] + hours_above = [] + pass_ase_grids = [] + ase_hr_pct = [] + for (grid_info, grid_area) in zip(grids_info, grid_areas): + light_paths = [lp[0] for lp in grid_info['light_path']] + arrays = [] + # combine direct array for all light paths + for light_path in light_paths: + array = results._get_array( + grid_info, light_path, res_type='direct') + array_filter = np.apply_along_axis( + filter_array, 1, array, occ_mask) + arrays.append(array_filter) + array = sum(arrays) + # calculate ase per grid + ase_grid, h_above = ase_array2d( + array, occ_hours=occ_hours, direct_threshold=direct_threshold) + + # calculate the number of sensor points above 1000 lux for each hour + ase_hr_pct.append( + _ase_hourly_percentage( + results, array, grid_info, direct_threshold=direct_threshold, + grid_area=grid_area + ) + ) + + ase_grids.append(ase_grid) + hours_above.append(h_above) + pass_ase = h_above < occ_hours + pass_ase_grids.append(pass_ase) + + # spatial daylight autonomy + da_grids = [] + pass_sda_grids = [] + pass_sda_blinds_up_grids = [] + pass_sda_blinds_down_grids = [] + for grid_info in grids_info: + light_paths = [lp[0] for lp in grid_info['light_path']] + base_zero_array = np.apply_along_axis(filter_array, 1, np.zeros( + (grid_info['count'], len(results.sun_up_hours))), occ_mask) + arrays = [base_zero_array.copy()] + arrays_blinds_up = [base_zero_array.copy()] + arrays_blinds_down = [base_zero_array.copy()] + # combine total array for all light paths + if use_states: + array = results._array_from_states(grid_info, states=states_schedule, zero_array=True) + array = np.apply_along_axis(filter_array, 1, array, occ_mask) + + for light_path in light_paths: + # do an extra pass to calculate with blinds always up or down + if light_path != '__static_apertures__': + array_blinds_up = results._get_array( + grid_info, light_path, state=0, res_type='total') + array_filter = np.apply_along_axis( + filter_array, 1, array_blinds_up, occ_mask) + arrays_blinds_up.append(array_filter) + array_blinds_down = results._get_array( + grid_info, light_path, state=1, res_type='total') + array_filter = np.apply_along_axis( + filter_array, 1, array_blinds_down, occ_mask) + arrays_blinds_down.append(array_filter) + else: + static_array = results._get_array( + grid_info, light_path, state=0, res_type='total') + array_filter = np.apply_along_axis( + filter_array, 1, static_array, occ_mask) + arrays_blinds_up.append(array_filter) + arrays_blinds_down.append(array_filter) + else: + for light_path in light_paths: + array = results._get_array( + grid_info, light_path, res_type='total') + array_filter = np.apply_along_axis( + filter_array, 1, array, occ_mask) + if light_path != '__static_apertures__': + sun_up_hours = np.array(results.sun_up_hours).astype(int) + shd_trans_array = states_schedule[light_path][sun_up_hours] + shd_trans_array = shd_trans_array[occ_mask.astype(bool)] + arrays.append(array_filter * shd_trans_array) + arrays_blinds_up.append(array_filter) + arrays_blinds_down.append( + array_filter * shd_trans_dict[light_path]) + else: + arrays.append(array_filter) + arrays_blinds_up.append(array_filter) + arrays_blinds_down.append(array_filter) + array = sum(arrays) + + array_blinds_up = sum(arrays_blinds_up) + array_blinds_down = sum(arrays_blinds_down) + # calculate da per grid + da_grid = da_array2d(array, total_occ=total_occ, threshold=threshold) + da_grids.append(da_grid) + da_blinds_up_grid = da_array2d( + array_blinds_up, total_occ=total_occ, threshold=threshold) + da_blinds_down_grid = da_array2d( + array_blinds_down, total_occ=total_occ, threshold=threshold) + # calculate sda per grid + pass_sda_grids.append(da_grid >= target_time) + pass_sda_blinds_up_grids.append(da_blinds_up_grid >= target_time) + pass_sda_blinds_down_grids.append(da_blinds_down_grid >= target_time) + + # create summaries for all grids and each grid individually + summary, summary_grid = _leed_summary( + pass_ase_grids, pass_sda_grids, grids_info, grid_areas, + pass_sda_blinds_up_grids, pass_sda_blinds_down_grids) + + # credits + if not fail_to_comply: + if summary['sda'] >= 75: + summary['credits'] = 3 + elif summary['sda'] >= 55: + summary['credits'] = 2 + elif summary['sda'] >= 40: + summary['credits'] = 1 + else: + summary['credits'] = 0 + + if all(grid_summary['sda'] >= 55 for grid_summary in summary_grid.values()): + if summary['credits'] <= 2: + summary['credits'] += 1 + else: + summary['credits'] = 'Exemplary performance' + else: + summary['credits'] = 0 + fail_to_comply_rooms = ', '.join(list(fail_to_comply.keys())) + note = ( + '0 credits have been awarded. The following sensor grids have at ' + 'least one hour where 2% of the floor area receives direct ' + f'illuminance of 1000 lux or more: {fail_to_comply_rooms}.' + ) + summary['note'] = note + + # convert to datacollection + def to_datacollection(aperture_group: str, values: np.ndarray): + # convert values to 0 and 1 (0 = no shading, 1 = shading) + if use_states: + header = Header(data_type=GenericType(aperture_group, ''), unit='', + analysis_period=AnalysisPeriod()) + hourly_data = HourlyContinuousCollection(header=header, values=values) + else: + values[values == 1] = 0 + values[values == shd_trans_dict[aperture_group]] = 1 + header = Header(data_type=GenericType(aperture_group, ''), unit='', + analysis_period=AnalysisPeriod(), + metadata={'Shade Transmittance': shd_trans_dict[aperture_group]}) + hourly_data = HourlyContinuousCollection(header=header, values=values.tolist()) + return hourly_data.to_dict() + + if use_states: + states_schedule = {k:to_datacollection(k, v['schedule']) for k, v in states_schedule.to_dict().items()} + else: + states_schedule = {k:to_datacollection(k, v) for k, v in states_schedule.items()} + + if sub_folder: + folder = Path(sub_folder) + folder.mkdir(parents=True, exist_ok=True) + + summary_file = folder.joinpath('summary.json') + summary_file.write_text(json.dumps(summary, indent=2)) + summary_grid_file = folder.joinpath('summary_grid.json') + summary_grid_file.write_text(json.dumps(summary_grid, indent=2)) + states_schedule_file = folder.joinpath('states_schedule.json') + states_schedule_file.write_text(json.dumps(states_schedule)) + grids_info_file = folder.joinpath('grids_info.json') + grids_info_file.write_text(json.dumps(grids_info, indent=2)) + + for (da, h_above, ase_hr_p, grid_info) in \ + zip(da_grids, hours_above, ase_hr_pct, grids_info): + grid_id = grid_info['full_id'] + da_file = folder.joinpath('results', 'da', f'{grid_id}.da') + da_file.parent.mkdir(parents=True, exist_ok=True) + hours_above_file = folder.joinpath( + 'results', 'ase_hours_above', f'{grid_id}.res') + hours_above_file.parent.mkdir(parents=True, exist_ok=True) + ase_hr_p_file = folder.joinpath( + 'datacollections', 'ase_percentage_above', f'{grid_id}.json') + ase_hr_p_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(da_file, da, fmt='%.2f') + np.savetxt(hours_above_file, h_above, fmt='%.0f') + ase_hr_p_file.write_text(json.dumps(ase_hr_p.to_dict())) + + da_grids_info_file = folder.joinpath( + 'results', 'da', 'grids_info.json') + da_grids_info_file.write_text(json.dumps(grids_info, indent=2)) + ase_grids_info_file = folder.joinpath( + 'results', 'ase_hours_above', 'grids_info.json') + ase_grids_info_file.write_text(json.dumps(grids_info, indent=2)) + ase_hr_pct_info_file = folder.joinpath( + 'datacollections', 'ase_percentage_above', 'grids_info.json') + ase_hr_pct_info_file.write_text(json.dumps(grids_info, indent=2)) + + states_schedule_err_file = \ + folder.joinpath('states_schedule_err.json') + states_schedule_err_file.write_text(json.dumps(fail_to_comply)) + + return (summary, summary_grid, da_grids, hours_above, states_schedule, + fail_to_comply, grids_info)
+ + + +def _leed_daylight_option_one_vis_metadata(): + """Return visualization metadata for leed daylight option one.""" + da_lpar = LegendParameters(min=0, max=100, colors=Colorset.annual_comfort()) + ase_hrs_lpar = LegendParameters(min=0, max=250, colors=Colorset.original()) + + metric_info_dict = { + 'da': { + 'type': 'VisualizationMetaData', + 'data_type': Fraction('Daylight Autonomy').to_dict(), + 'unit': '%', + 'legend_parameters': da_lpar.to_dict() + }, + 'ase_hours_above': { + 'type': 'VisualizationMetaData', + 'data_type': Time('Hours above direct threshold').to_dict(), + 'unit': 'hr', + 'legend_parameters': ase_hrs_lpar.to_dict() + } + } + + return metric_info_dict +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/leed/leed_schedule.html b/docs/_modules/honeybee_radiance_postprocess/leed/leed_schedule.html new file mode 100644 index 00000000..dcf78d59 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/leed/leed_schedule.html @@ -0,0 +1,921 @@ + + + + + + + honeybee_radiance_postprocess.leed.leed_schedule — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.leed.leed_schedule

+"""Module for dynamic LEED schedules."""
+from typing import Tuple
+import numpy as np
+
+from ..results.annual_daylight import AnnualDaylight
+from ..util import filter_array
+
+
+
+[docs] +def shd_trans_schedule_descending( + results: AnnualDaylight, grid_info, light_paths, shade_transmittances, occ_mask, + states_schedule, fail_to_comply + ) -> Tuple[dict, dict]: + grid_count = grid_info['count'] + full_direct = [] + full_thresh = [] + full_shd_trans_array = [] + for light_path in light_paths: + array = results._get_array(grid_info, light_path, res_type="direct") + array = np.apply_along_axis(filter_array, 1, array, occ_mask) + full_direct.append(array) + full_thresh.append((array >= 1000).sum(axis=0)) + full_shd_trans_array.append(shade_transmittances[light_path][1]) + + # Sum the array element-wise. + # This array is the sum of all direct illuminance without shade + # transmittance. + full_direct_sum = sum(full_direct) + + # Create base list of shading combinations (all set to 1). + # We will replace the 1s later. + combinations = [ + {light_path: 1 for light_path in light_paths} + for i in range(full_direct_sum.shape[1]) + ] + + # Find the percentage of floor area >= 1000 lux. + # This array is the percentage for each hour (axis=0). + direct_pct_above = (full_direct_sum >= 1000).sum(axis=0) / grid_count + + # Find the indices where the percentage of floor area is > 2%. + # This array is the problematic hours. + above_2_indices = np.where(direct_pct_above > 0.02)[0] + + # Use the indices to get the relevant hours. + direct_sum = np.take(full_direct_sum, above_2_indices, axis=1) + + # Use the indices to get the relevant hours. + direct = np.take(full_direct, above_2_indices, axis=2) + + # Use the indices to get the relevant hours. + thresh = np.take(full_thresh, above_2_indices, axis=1) + + # Sort and get indices. Negate the array to get descending order. + # Descending order puts the "highest offender" light path first. + sort_thresh = np.argsort(-thresh, axis=0).transpose() + + _combinations = [] + _combinations.insert( + 0, (np.arange(full_direct_sum.shape[1]), combinations) + ) + + if np.any(above_2_indices): + # There are hours where the percentage of floor area is > 2%. + for idx, lp in enumerate(light_paths): + # Take column. For each iteration it will take the next column + # in descending order, i.e., the "highest offender" is the first + # column. + sort_indices = np.take(sort_thresh, idx, axis=1) + + # Map light path identifiers to indices. + light_path_ids = np.take(light_paths, sort_indices) + + # Map shade transmittance to indices. + shd_trans_array = np.take(full_shd_trans_array, sort_indices) + + # Create combination for the subset. + _subset_combination = [ + {light_path: _shd_trans} for light_path, _shd_trans in + zip(light_path_ids, shd_trans_array) + ] + _combinations.insert(0, (above_2_indices, _subset_combination)) + + # Take the values from each array by indexing. + direct_array = \ + direct[sort_indices, :, range(len(sort_indices))].transpose() + + # Subtract the illuminance values. + direct_sum = direct_sum - (direct_array * (1 - shd_trans_array)) + + # Find the percentage of floor area >= 1000 lux. + direct_pct_above = (direct_sum >= 1000).sum(axis=0) / grid_count + + # Find the indices where the percentage of floor area is > 2%. + above_2_indices = np.where(direct_pct_above > 0.02)[0] + + # Break if there are no hours above 2%. + if not np.any(above_2_indices): + break + + # Update variables for the next iteration. + direct_sum = np.take(direct_sum, above_2_indices, axis=1) + direct = np.take(direct, above_2_indices, axis=2) + thresh = np.take(thresh, above_2_indices, axis=1) + sort_thresh = np.take(sort_thresh, above_2_indices, axis=0) + + if np.any(above_2_indices): + # There are hours not complying with the 2% rule. + previous_indices = [] + previous_combination = [] + grid_comply = [] + # Merge the combinations from the iterations of the subsets. + for i, subset in enumerate(_combinations): + if i == 0: + previous_indices = subset[0] + else: + _indices = subset[0] + grid_comply = [] + for _pr_idx in previous_indices: + grid_comply.append(_indices[_pr_idx]) + previous_indices = grid_comply + # Convert indices to sun up hours indices. + filter_indices = np.where(occ_mask.astype(bool))[0] + grid_comply = [filter_indices[_gc] for _gc in grid_comply] + grid_comply = np.array(results.sun_up_hours)[grid_comply] + fail_to_comply[grid_info['name']] = \ + [int(hoy) for hoy in grid_comply] + + previous_indices = None + previous_combination = None + # Merge the combinations from the iterations of the subsets. + for i, subset in enumerate(_combinations): + if i == 0: + previous_indices, previous_combination = subset + else: + _indices, _combination = subset + for _pr_idx, _pr_comb in \ + zip(previous_indices, previous_combination): + for light_path, _shd_trans in _pr_comb.items(): + _combination[_pr_idx][light_path] = _shd_trans + previous_indices = _indices + previous_combination = _combination + + combinations = _combination + + # Merge the combinations of dicts. + for combination in combinations: + for light_path, shd_trans in combination.items(): + if light_path != "__static_apertures__": + states_schedule[light_path].append(shd_trans) + + return states_schedule, fail_to_comply
+ + + +
+[docs] +def states_schedule_descending( + results: AnnualDaylight, grid_info, light_paths, occ_mask, + states_schedule, fail_to_comply + ) -> Tuple[dict, dict]: + grid_count = grid_info['count'] + full_direct = [] + full_thresh = [] + full_direct_blinds = [] + for light_path in light_paths: + array = results._get_array( + grid_info, light_path, state=0, res_type="direct") + array = np.apply_along_axis(filter_array, 1, array, occ_mask) + full_direct.append(array) + full_thresh.append((array >= 1000).sum(axis=0)) + + array = results._get_array( + grid_info, light_path, state=1, res_type="direct") + array = np.apply_along_axis(filter_array, 1, array, occ_mask) + full_direct_blinds.append(array) + + full_direct = np.array(full_direct) + full_direct_blinds = np.array(full_direct_blinds) + full_direct_sum = full_direct.sum(axis=0) + + new_array = full_direct.copy() + + percentage_sensors = (full_direct_sum >= 1000).sum(axis=0) / grid_count + if not np.any(percentage_sensors > 0.02): + combinations = [ + {light_path: 0 for light_path in light_paths} + for i in range(full_direct_sum.shape[1])] + else: + tracking_array = np.zeros( + (new_array.shape[0], new_array.shape[2]), dtype=int) + + percentage_sensors = (full_direct >= 1000).sum(axis=1) / grid_count + + ranking_indices = np.argsort(-percentage_sensors, axis=0) + + for rank in range(ranking_indices.shape[0]): + # Calculate the percentage of sensors with values >= 1000 for the current new_array + summed_array = np.sum(new_array, axis=0) + percentage_sensors_summed = np.sum( + summed_array >= 1000, axis=0) / grid_count + indices_above_2_percent = np.where( + percentage_sensors_summed > 0.02)[0] + + # Exit if there are no more hours exceeding the threshold + if len(indices_above_2_percent) == 0: + break + + # Array indices to use for replacement for these hours + replace_indices = indices_above_2_percent + array_indices = ranking_indices[rank, replace_indices] + + # Use advanced indexing to replace values in new_array for these hours + for hour_idx, array_idx in zip(replace_indices, array_indices): + new_array[array_idx, :, hour_idx] = full_direct_blinds[ + array_idx, :, hour_idx + ] + + # Update the tracking array + tracking_array[array_indices, replace_indices] = 1 + + combinations = [] + for hour in range(new_array.shape[2]): + hour_dict = { + light_paths[i]: tracking_array[i, hour] + for i in range(tracking_array.shape[0])} + combinations.append(hour_dict) + + final_summed_array = np.sum(new_array, axis=0) + final_percentage_sensors_summed = ( + final_summed_array >= 1000).sum( + axis=0) / grid_count + final_indices_above_2_percent = np.where( + final_percentage_sensors_summed > 0.02)[0] + if np.any(final_indices_above_2_percent): + sun_up_hours_indices = np.where(occ_mask == 1)[0][ + final_indices_above_2_percent] + grid_comply = np.array(results.sun_up_hours)[sun_up_hours_indices] + fail_to_comply[grid_info['name']] = [ + int(hoy) for hoy in grid_comply] + + for combination in combinations: + for light_path, value in combination.items(): + if light_path != '__static_apertures__': + states_schedule[light_path].append(value) + + return states_schedule, fail_to_comply
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/metrics.html b/docs/_modules/honeybee_radiance_postprocess/metrics.html new file mode 100644 index 00000000..489d360b --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/metrics.html @@ -0,0 +1,1137 @@ + + + + + + + honeybee_radiance_postprocess.metrics — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.metrics

+"""Functions to calculate various metrics for 1D and 2D NumPy arrays."""
+from typing import Tuple, Union
+import numpy as np
+
+from .util import check_array_dim
+
+
+
+[docs] +def da_array2d( + array: np.ndarray, total_occ: int = None, + threshold: float = 300) -> np.ndarray: + """Calculate daylight autonomy for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not + given any input the number of occupied hours will be found by the + array shape, i.e., it is assumed that the array is filtered by + occupied hours. + threshold: Threshold value for daylight autonomy. Default: 300. + + Returns: + A 1-dimensional NumPy array with the daylight autonomy for each row in + the input array. + """ + check_array_dim(array, 2) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.shape[1] + + da = np.apply_along_axis( + da_array1d, 1, array, total_occ=total_occ, threshold=threshold) + + return da
+ + + +
+[docs] +def da_array1d( + array: np.ndarray, total_occ: int = None, + threshold: float = 300) -> np.float64: + """Calculate daylight autonomy for a 1D NumPy array. + + Args: + array: A 1D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + threshold: Threshold value for daylight autonomy. Default: 300. + + Returns: + A NumPy float of the daylight autonomy. + """ + check_array_dim(array, 1) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.size + + return np.float64((array >= threshold).sum() / total_occ * 100)
+ + + +
+[docs] +def cda_array2d( + array: np.ndarray, total_occ: int = None, + threshold: float = 300) -> np.ndarray: + """Calculate continuos daylight autonomy for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + threshold: Threshold value for continuos daylight autonomy. Default: 300. + + Returns: + A 1-dimensional NumPy array with the continuos daylight autonomy for + each row in the input array. + """ + check_array_dim(array, 2) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.shape[1] + + cda = np.apply_along_axis( + cda_array1d, 1, array, total_occ=total_occ, threshold=threshold) + + return cda
+ + + +
+[docs] +def cda_array1d( + array: np.ndarray, total_occ: int = None, + threshold: float = 300) -> np.float64: + """Calculate continuos daylight autonomy for a 1D NumPy array. + + Args: + array: A 1D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + threshold: Threshold value for continuos daylight autonomy. Default: 300. + + Returns: + A NumPy float of the continuos daylight autonomy. + """ + check_array_dim(array, 1) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.size + + return np.float64( + np.where(array >= threshold, 1, array / threshold).sum() / total_occ * 100)
+ + + +
+[docs] +def udi_array2d( + array: np.ndarray, total_occ: int = None, min_t: float = 100, + max_t: float = 3000) -> np.ndarray: + """Calculate useful daylight illuminance for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + min_t: Minimum threshold for useful daylight illuminance. Default: 100. + max_t: Maximum threshold for useful daylight illuminance. Default: 3000. + + Returns: + A 1-dimensional NumPy array with the useful daylight illuminance for + each row in the input array. + """ + check_array_dim(array, 2) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.shape[1] + + udi = np.apply_along_axis( + udi_array1d, 1, array, total_occ=total_occ, min_t=min_t, max_t=max_t) + + return udi
+ + + +
+[docs] +def udi_array1d( + array: np.ndarray, total_occ: int = None, min_t: float = 100, + max_t: float = 3000) -> np.float64: + """Calculate useful daylight illuminance for a 1D NumPy array. + + Args: + array: A 1D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + min_t: Minimum threshold for useful daylight illuminance. Default: 100. + max_t: Maximum threshold for useful daylight illuminance. Default: 3000. + + Returns: + A NumPy float of the useful daylight illuminance. + """ + check_array_dim(array, 1) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.size + + return np.float64(((array >= min_t) & (array <= max_t)).sum() / total_occ * 100)
+ + + +
+[docs] +def udi_lower_array2d( + array: np.ndarray, total_occ: int = None, min_t: float = 100, + sun_down_occ_hours: int = 0) -> np.ndarray: + """Calculate lower than useful daylight illuminance for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + min_t: Minimum threshold for useful daylight illuminance. Default: 100. + sun_down_occ_hours: Number of occupied hours where the sun is down. + + Returns: + A 1-dimensional NumPy array with the lower than useful daylight + illuminance for each row in the input array. + """ + check_array_dim(array, 2) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.shape[1] + + udi = np.apply_along_axis( + udi_lower_array1d, 1, array, total_occ=total_occ, min_t=min_t, + sun_down_occ_hours=sun_down_occ_hours) + + return udi
+ + + +
+[docs] +def udi_lower_array1d( + array: np.ndarray, total_occ: int = None, min_t: float = 100, + sun_down_occ_hours: int = 0) -> np.float64: + """Calculate lower than useful daylight illuminance for a 1D NumPy array. + + Args: + array: A 1D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + min_t: Minimum threshold for useful daylight illuminance. Default: 100. + sun_down_occ_hours: Number of occupied hours where the sun is down. + + Returns: + A NumPy float of the lower than useful daylight illuminance. + """ + check_array_dim(array, 1) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.size + + if min_t == 0: + return np.float64(0) + + return np.float64(((array < min_t).sum() + sun_down_occ_hours) / total_occ * 100)
+ + + +
+[docs] +def udi_upper_array2d( + array: np.ndarray, total_occ: int = None, + max_t: float = 3000) -> np.ndarray: + """Calculate higher than useful daylight illuminance for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + max_t: Maximum threshold for useful daylight illuminance. Default: 3000. + + Returns: + A 1-dimensional NumPy array with the higher than useful daylight + illuminance for each row in the input array. + """ + check_array_dim(array, 2) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.shape[1] + + udi = np.apply_along_axis( + udi_upper_array1d, 1, array, total_occ=total_occ, max_t=max_t) + + return udi
+ + + +
+[docs] +def udi_upper_array1d( + array: np.ndarray, total_occ: int = None, + max_t: float = 3000) -> np.float64: + """Calculate higher than useful daylight illuminance for a 1D NumPy array. + + Args: + array: A 1D NumPy array. + total_occ: Integer indicating the number of occupied hours. If not given any + input the number of occupied hours will be found by the array shape. + max_t: Maximum threshold for higher than useful daylight illuminance. + Default: 3000. + + Returns: + A NumPy float of the higher than useful daylight illuminance. + """ + check_array_dim(array, 1) + if total_occ is None: + # set total_occ to number of columns in array + total_occ = array.size + + return np.float64((array > max_t).sum() / total_occ * 100)
+ + + +
+[docs] +def sda_array2d( + array: np.ndarray, target_time: float = 50, threshold: float = 300, + total_occ: int = None) -> np.ndarray: + """Calculate spatial daylight autonomy for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + target_time: A minimum threshold of occupied time (eg. 50% of the + time), above which a given sensor passes and contributes to the + spatial daylight autonomy. Defaults to 50. + threshold: Threshold value for daylight autonomy. Default: 300. + total_occ: Integer indicating the number of occupied hours. If not + given any input the number of occupied hours will be found by the + array shape, i.e., it is assumed that the array is filtered by + occupied hours. + + Returns: + A NumPy float of the sDA as a percentage (decimal) + """ + da = da_array2d(array, total_occ=total_occ, threshold=threshold) + sda = (da >= target_time).mean() + + return sda
+ + + +
+[docs] +def ase_array2d( + array: np.ndarray, occ_hours: int = 250, + direct_threshold: float = 1000) -> Tuple[np.ndarray, np.ndarray]: + """Calculate annual sunlight exposure for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + occ_hours: The number of occupied hours that cannot receive more than + the direct_threshold. Defaults to 250. + direct_threshold: The threshold that determines if a sensor is overlit. + Defaults to 1000. + + Returns: + A NumPy float of the ASE as a percentage (decimal). + """ + check_array_dim(array, 2) + h_above = (array > direct_threshold).sum(axis=1) + ase = (h_above > occ_hours).sum() / array.shape[0] * 100 + + return ase, h_above
+ + + +
+[docs] +def average_values_array2d( + array: np.ndarray, full_length: int = 8760) -> np.ndarray: + """Calculate average values for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + full_length: Integer to use as divisor. + + Returns: + A 1-dimensional NumPy array with the average value for each row in the + input array. + """ + check_array_dim(array, 2) + + avg_values = array.sum(axis=1) / full_length + + return avg_values
+ + + +
+[docs] +def average_values_array1d( + array: np.ndarray, full_length: int = 8760) -> np.float64: + """Calculate average value for a 1D NumPy array. + + Args: + array: A 1D NumPy array. + full_length: Integer to use as divisor. + + Returns: + A NumPy float of the average value. + """ + check_array_dim(array, 1) + + return array.sum() / full_length
+ + + +
+[docs] +def cumulative_values_array2d( + array: np.ndarray, timestep: int = 1, t_step_multiplier: float = 1 + ) -> np.ndarray: + """Calculate cumulative values for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + timestep: Integer for the timestep of the analysis. + t_step_multiplier: A value that will be multiplied with the timestep. + + Returns: + A 1-dimensional NumPy array with the cumulative value for each row in + the input array. + """ + check_array_dim(array, 2) + + cumulative_values = array.sum(axis=1) / (timestep * t_step_multiplier) + + return cumulative_values
+ + + +
+[docs] +def cumulative_values_array1d( + array: np.ndarray, timestep: int = 1, t_step_multiplier: float = 1 + ) -> np.float64: + """Calculate daylight autonomy for a 1D NumPy array. + + Args: + array: A 1D NumPy array. + timestep: Integer for the timestep of the analysis. + t_step_multiplier: A value that will be multiplied with the timestep. + + Returns: + A NumPy float of the cumulative value. + """ + check_array_dim(array, 1) + + return array.sum() / (timestep * t_step_multiplier)
+ + + +
+[docs] +def peak_values_array2d( + array: np.ndarray, coincident: bool = False + ) -> Tuple[np.ndarray, Union[int, None]]: + """Calculate peak values for a 2D NumPy array. + + Args: + array: A 2D NumPy array. + coincident: Boolean to indicate whether output values represent the + peak value for each sensor throughout the entire analysis (False) + or they represent the highest overall value across each sensor grid + at a particular timestep (True). + + Returns: + A 1-dimensional NumPy array with the peak value for each row in the + input array, and the index of the maximum value representing the + timestep in the array with the largest value. + """ + check_array_dim(array, 2) + + max_i = None + if coincident: + array_summed = array.sum(axis=0) + if np.any(array_summed): + max_i = np.argmax(array_summed) + peak_values = array[:, max_i] + else: + peak_values = np.zeros(array.shape[0]) + else: + if np.any(array): + peak_values = np.amax(array, axis=1) + else: + peak_values = np.zeros(array.shape[0]) + + return peak_values, max_i
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/reader.html b/docs/_modules/honeybee_radiance_postprocess/reader.html new file mode 100644 index 00000000..edd873ba --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/reader.html @@ -0,0 +1,753 @@ + + + + + + + honeybee_radiance_postprocess.reader — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.reader

+"""Post-processing reader functions."""
+import numpy as np
+
+from .util import binary_mtx_dimension
+
+
+
+[docs] +def binary_to_array( + binary_file: str, nrows: int = None, ncols: int = None, + ncomp: int = None, fmt=None, line_count: int = 0) -> np.ndarray: + """Read a Radiance binary file as a NumPy array. + + Args: + binary_file: Path to binary Radiance file. + nrows: Number of rows in the Radiance file. + ncols: Number of columns in the Radiance file. + ncomp: Number of components of each element in the Radiance file. + fmt: Format of the Radiance file. Can be either "ascii", "float", or "double. + line_count: Number of lines to skip in the input file. Usually used to + skip the header. + + Returns: + A NumPy array. + """ + if (nrows or ncols or ncomp or fmt) is None: + # get nrows, ncols and header line count + nrows, ncols, ncomp, line_count, fmt = binary_mtx_dimension(binary_file) + with open(binary_file, 'rb') as reader: + # skip first n lines from reader + for i in range(line_count): + reader.readline() + + if fmt == 'ascii': + array = np.loadtxt(reader, dtype=np.float32) + elif fmt == 'float': + array = np.fromfile(reader, dtype=np.float32) + elif fmt == 'double': + array = np.fromfile(reader, dtype=np.float64) + + if ncomp != 1: + array = array.reshape(nrows, ncols, ncomp) + else: + array = array.reshape(nrows, ncols) + + return array
+ + + +
+[docs] +def ascii_to_array( + ascii_file: str, nrows: int = None, ncols: int = None, + ncomp: int = None, line_count: int = 0) -> np.ndarray: + """Read a Radiance ascii file as a NumPy array. + + Args: + ascii_file: Path to ascii Radiance file. + nrows: Number of rows in the Radiance file. + ncols: Number of columns in the Radiance file. + ncomp: Number of components of each element in the Radiance file. + line_count: Number of lines to skip in the input file. Usually used to + skip the header. + + Returns: + A NumPy array. + """ + with open(ascii_file, 'r') as reader: + if (nrows or ncols or ncomp) is None: + # get nrows, ncols and header line count + # we can reuse binary_mtx_dimension though the input file is ascii + nrows, ncols, ncomp, line_count, fmt = binary_mtx_dimension(ascii_file) + + array = np.loadtxt(reader, dtype=np.float32, skiprows=line_count) + if ncomp != 1: + array = array.reshape(nrows, ncols, ncomp) + else: + array = array.reshape(nrows, ncols) + + return array
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/results/annual_daylight.html b/docs/_modules/honeybee_radiance_postprocess/results/annual_daylight.html new file mode 100644 index 00000000..01cffd95 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/results/annual_daylight.html @@ -0,0 +1,1471 @@ + + + + + + + honeybee_radiance_postprocess.results.annual_daylight — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.results.annual_daylight

+import json
+from pathlib import Path
+from typing import Tuple, List
+import numpy as np
+import itertools
+from collections import defaultdict
+
+from ladybug.analysisperiod import AnalysisPeriod
+from ladybug.datacollection import HourlyContinuousCollection
+from ladybug.datatype.illuminance import Illuminance
+from ladybug.datatype.fraction import Fraction
+from ladybug.header import Header
+
+from ..annual import occupancy_schedule_8_to_6
+from ..metrics import da_array2d, cda_array2d, udi_array2d, udi_lower_array2d, \
+    udi_upper_array2d, ase_array2d
+from ..util import filter_array
+from ..annualdaylight import _annual_daylight_vis_metadata
+from ..electriclight import array_to_dimming_fraction
+from .. import type_hints
+from ..dynamic import DynamicSchedule, ApertureGroupSchedule
+from .results import Results
+
+
+
+[docs] +class AnnualDaylight(Results): + """Annual Daylight Results class. + + Args: + folder: Path to results folder. + schedule: 8760 values as a list. Values must be either 0 or 1. Values of 1 + indicates occupied hours. If no schedule is provided a default schedule + will be used. (Default: None). + load_arrays: Set to True to load all NumPy arrays. If False the arrays will be + loaded only once they are needed. In both cases the loaded array(s) will be + stored in a dictionary under the arrays property. (Default: False). + + Properties: + * schedule + * occ_pattern + * total_occ + * sun_down_occ_hours + * occ_mask + * arrays + * valid_states + * datatype + """ + def __init__(self, folder, schedule: list = None, load_arrays: bool = False): + """Initialize Results.""" + Results.__init__(self, folder, datatype=Illuminance('Illuminance'), + schedule=schedule, unit='lux', load_arrays=load_arrays) + +
+[docs] + def daylight_autonomy( + self, threshold: float = 300, states: DynamicSchedule = None, + grids_filter: str = '*') -> type_hints.annual_metric: + """Calculate daylight autonomy. + + Args: + threshold: Threshold value for daylight autonomy. Defaults to 300. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the daylight autonomy and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + + da = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type='total') + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=self.occ_mask) + results = da_array2d( + array_filter, total_occ=self.total_occ, threshold=threshold) + else: + results = np.zeros(grid_info['count']) + da.append(results) + + return da, grids_info
+ + +
+[docs] + def continuous_daylight_autonomy( + self, threshold: float = 300, states: DynamicSchedule = None, + grids_filter: str = '*') -> type_hints.annual_metric: + """Calculate continuous daylight autonomy. + + Args: + threshold: Threshold value for daylight autonomy. Defaults to 300. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the continuous daylight autonomy and grid + information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + + cda = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type='total') + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=self.occ_mask) + results = cda_array2d( + array_filter, total_occ=self.total_occ, threshold=threshold) + else: + results = np.zeros(grid_info['count']) + cda.append(results) + + return cda, grids_info
+ + +
+[docs] + def useful_daylight_illuminance( + self, min_t: float = 100, max_t: float = 3000, states: DynamicSchedule = None, + grids_filter: str = '*') -> type_hints.annual_metric: + """Calculate useful daylight illuminance. + + Args: + min_t: Minimum threshold for useful daylight illuminance. Defaults to 100. + max_t: Maximum threshold for useful daylight illuminance. Defaults to 3000. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the useful daylight illuminance and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + + udi = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type='total') + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=self.occ_mask) + results = udi_array2d( + array_filter, total_occ=self.total_occ, min_t=min_t, max_t=max_t) + else: + results = np.zeros(grid_info['count']) + udi.append(results) + + return udi, grids_info
+ + +
+[docs] + def useful_daylight_illuminance_lower( + self, min_t: float = 100, states: DynamicSchedule = None, + grids_filter: str = '*') -> type_hints.annual_metric: + """Calculate lower than useful daylight illuminance. + + Args: + min_t: Minimum threshold for useful daylight illuminance. Defaults to 100. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the lower than useful daylight illuminance and + grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + sun_down_occ_hours = self.sun_down_occ_hours + + udi_lower = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type='total') + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=self.occ_mask) + results = udi_lower_array2d( + array_filter, total_occ=self.total_occ, + min_t=min_t, sun_down_occ_hours=sun_down_occ_hours) + else: + results = np.zeros(grid_info['count']) + udi_lower.append(results) + + return udi_lower, grids_info
+ + +
+[docs] + def useful_daylight_illuminance_upper( + self, max_t: float = 3000, states: DynamicSchedule = None, + grids_filter: str = '*') -> type_hints.annual_metric: + """Calculate higher than useful daylight illuminance. + + Args: + max_t: Maximum threshold for useful daylight illuminance. Defaults to 3000. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the higher than useful daylight illuminance and + grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + + udi_upper = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type='total') + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=self.occ_mask) + results = udi_upper_array2d( + array_filter, total_occ=self.total_occ, max_t=max_t) + else: + results = np.zeros(grid_info['count']) + udi_upper.append(results) + + return udi_upper, grids_info
+ + +
+[docs] + def annual_metrics( + self, threshold: float = 300, min_t: float = 100, + max_t: float = 3000, states: DynamicSchedule = None, + grids_filter: str = '*') -> type_hints.annual_daylight_metrics: + """Calculate multiple annual daylight metrics. + + This method will calculate the following metrics: + * Daylight autonomy + * Continuous daylight autonomy + * Useful daylight illuminance + * Lower than useful daylight illuminance + * Higher than useful daylight illuminance + + Args: + threshold: Threshold value for daylight autonomy. Defaults to 300. + min_t: Minimum threshold for useful daylight illuminance. Defaults to 100. + max_t: Maximum threshold for useful daylight illuminance. Defaults to 3000. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the five annual daylight metrics and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + sun_down_occ_hours = self.sun_down_occ_hours + + da = [] + cda = [] + udi = [] + udi_lower = [] + udi_upper = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type='total') + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=self.occ_mask) + da_results = da_array2d( + array_filter, total_occ=self.total_occ, threshold=threshold) + cda_results = cda_array2d( + array_filter, total_occ=self.total_occ, threshold=threshold) + udi_results = udi_array2d( + array_filter, total_occ=self.total_occ, min_t=min_t, max_t=max_t) + udi_lower_results = udi_lower_array2d( + array_filter, total_occ=self.total_occ, min_t=min_t, + sun_down_occ_hours=sun_down_occ_hours) + udi_upper_results = udi_upper_array2d( + array_filter, total_occ=self.total_occ, max_t=max_t) + else: + da_results = cda_results = udi_results = udi_lower_results = \ + udi_upper_results = np.zeros(grid_info['count']) + da.append(da_results) + cda.append(cda_results) + udi.append(udi_results) + udi_lower.append(udi_lower_results) + udi_upper.append(udi_upper_results) + + return da, cda, udi, udi_lower, udi_upper, grids_info
+ + +
+[docs] + def annual_metrics_to_folder( + self, target_folder: str, threshold: float = 300, + min_t: float = 100, max_t: float = 3000, states: DynamicSchedule = None, + grids_filter: str = '*'): + """Calculate and write multiple annual daylight metrics to a folder. + + This method will calculate the following metrics: + * Daylight autonomy + * Continuous daylight autonomy + * Useful daylight illuminance + * Lower than useful daylight illuminance + * Higher than useful daylight illuminance + + Args: + target_folder: Folder path to write annual metrics in. Usually this + folder is called 'metrics'. + threshold: Threshold value for daylight autonomy. Defaults to 300. + min_t: Minimum threshold for useful daylight illuminance. Defaults to 100. + max_t: Maximum threshold for useful daylight illuminance. Defaults to 3000. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + da, cda, udi, udi_lower, udi_upper, grids_info = self.annual_metrics( + threshold=threshold, min_t=min_t, max_t=max_t, states=states, + grids_filter=grids_filter) + + pattern = { + 'da': da, 'cda': cda, 'udi_lower': udi_lower, 'udi': udi, + 'udi_upper': udi_upper + } + for metric, data in pattern.items(): + metric_folder = folder.joinpath(metric) + extension = metric.split('_')[0] + for count, grid_info in enumerate(grids_info): + d = data[count] + full_id = grid_info['full_id'] + output_file = metric_folder.joinpath(f'{full_id}.{extension}') + output_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(output_file, d, fmt='%.2f') + + for metric in pattern.keys(): + info_file = folder.joinpath(metric, 'grids_info.json') + info_file.write_text(json.dumps(grids_info)) + + metric_info_dict = _annual_daylight_vis_metadata() + for metric, data in metric_info_dict.items(): + vis_metadata_file = folder.joinpath(metric, 'vis_metadata.json') + vis_metadata_file.write_text(json.dumps(data, indent=4))
+ + +
+[docs] + def spatial_daylight_autonomy( + self, threshold: float = 300, target_time: float = 50, + states: DynamicSchedule = None, grids_filter: str = '*' + ) -> type_hints.spatial_daylight_autonomy: + """Calculate spatial daylight autonomy. + + Note: This component will only output a LEED compliant sDA if you've + run the simulation with blinds and blinds schedules as per the + IES-LM-83-12. Use the states option to calculate a LEED compliant sDA. + + Args: + threshold: Threshold value for daylight autonomy. Defaults to 300. + target_time: A minimum threshold of occupied time (eg. 50% of the + time), above which a given sensor passes and contributes to the + spatial daylight autonomy. Defaults to 50. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the spatial daylight autonomy and grid + information. + """ + da, grids_info = self.daylight_autonomy( + threshold=threshold, states=states, grids_filter=grids_filter) + + sda = [] + for array in da: + sda.append((array >= target_time).mean()) + + return sda, grids_info
+ + +
+[docs] + def annual_sunlight_exposure( + self, direct_threshold: float = 1000, occ_hours: int = 250, + states: DynamicSchedule = None, grids_filter: str = '*' + ) -> type_hints.annual_sunlight_exposure: + """Calculate annual sunlight exposure. + + Args: + direct_threshold: The threshold that determines if a sensor is + overlit. Defaults to 1000. + occ_hours: The number of occupied hours that cannot receive more + than the direct_threshold. Defaults to 250. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the annual sunlight exposure, the number of + hours that exceeds the direct threshold for each sensor, and + grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + + ase = [] + hours_above = [] + for grid_info in grids_info: + array = self._array_from_states( + grid_info, states=states, res_type='direct') + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=self.occ_mask) + results, h_above = ase_array2d( + array_filter, occ_hours=occ_hours, + direct_threshold=direct_threshold) + else: + results = np.float64(0) + h_above = np.zeros(grid_info['count']) + ase.append(results) + hours_above.append(h_above) + + return ase, hours_above, grids_info
+ + +
+[docs] + def annual_sunlight_exposure_to_folder( + self, target_folder: str, direct_threshold: float = 1000, + occ_hours: int = 250, states: DynamicSchedule = None, + grids_filter: str = '*'): + """Calculate and write annual sunlight exposure to a folder. + + Args: + direct_threshold: The threshold that determines if a sensor is + overlit. Defaults to 1000. + occ_hours: The number of occupied hours that cannot receive more + than the direct_threshold. Defaults to 250. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + ase, hours_above, grids_info = self.annual_sunlight_exposure( + direct_threshold=direct_threshold, occ_hours=occ_hours, + states=states, grids_filter=grids_filter + ) + + pattern = {'ase': ase, 'hours_above': hours_above} + for metric, data in pattern.items(): + metric_folder = folder.joinpath(metric) + if metric == 'hours_above': + extension = 'res' + else: + extension = 'ase' + for count, grid_info in enumerate(grids_info): + d = data[count] + full_id = grid_info['full_id'] + output_file = metric_folder.joinpath(f'{full_id}.{extension}') + output_file.parent.mkdir(parents=True, exist_ok=True) + if metric == 'hours_above': + np.savetxt(output_file, d, fmt='%i') + elif metric == 'ase': + output_file.write_text('%.2f' % d) + + for metric in pattern.keys(): + info_file = folder.joinpath(metric, 'grids_info.json') + info_file.write_text(json.dumps(grids_info))
+ + +
+[docs] + def daylight_control_schedules( + self, states: DynamicSchedule = None, grids_filter: str = '*', + base_schedule: list = None, ill_setpoint: float = 300, + min_power_in: float = 0.3, min_light_out: float = 0.2, + off_at_min: bool = False + ) -> Tuple[List[np.ndarray], List[dict]]: + """Generate electric lighting schedules from annual daylight results. + + Such controls will dim the lights according to whether the illuminance values + at the sensor locations are at a target illuminance setpoint. The results can be + used to account for daylight controls in energy simulations. + + This function will generate one schedule per sensor grid in the simulation. Each + grid should have sensors at the locations in space where daylight dimming sensors + are located. Grids with one, two, or more sensors can be used to model setups + where fractions of each room are controlled by different sensors. If the sensor + grids are distributed over the entire floor of the rooms, the resulting schedules + will be idealized, where light dimming has been optimized to supply the minimum + illuminance setpoint everywhere in the room. + + Args: + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + base_schedule: A list of 8760 fractional values for the lighting schedule + representing the usage of lights without any daylight controls. The + values of this schedule will be multiplied by the hourly dimming + fraction to yield the output lighting schedules. If None, a schedule + from 9AM to 5PM on weekdays will be used. (Default: None). + ill_setpoint: A number for the illuminance setpoint in lux beyond which + electric lights are dimmed if there is sufficient daylight. + Some common setpoints are listed below. (Default: 300 lux). + + * 50 lux - Corridors and hallways. + * 150 lux - Computer work spaces (screens provide illumination). + * 300 lux - Paper work spaces (reading from surfaces that need illumination). + * 500 lux - Retail spaces or museums illuminating merchandise/artifacts. + * 1000 lux - Operating rooms and workshops where light is needed for safety. + + min_power_in: A number between 0 and 1 for the the lowest power the lighting + system can dim down to, expressed as a fraction of maximum + input power. (Default: 0.3). + min_light_out: A number between 0 and 1 the lowest lighting output the lighting + system can dim down to, expressed as a fraction of maximum light + output. Note that setting this to 1 means lights aren't dimmed at + all until the illuminance setpoint is reached. This can be used to + approximate manual light-switching behavior when used in conjunction + with the off_at_min input below. (Default: 0.2). + off_at_min: Boolean to note whether lights should switch off completely when + they get to the minimum power input. (Default: False). + + Returns: + A tuple with two values. + + - schedules: A list of lists where each sub-list represents an electric + lighting dimming schedule for a sensor grid. + + - grids_info: A list of grid information. + """ + # process the base schedule input into a list of values + if base_schedule is None: + base_schedule = occupancy_schedule_8_to_6(timestep=self.timestep) + base_schedule = np.array(base_schedule) + + grids_info = self._filter_grids(grids_filter=grids_filter) + sun_up_hours = [int(h) for h in self.sun_up_hours] + + dim_fracts = [] + for grid_info in grids_info: + array = self._array_from_states( + grid_info, states=states, res_type='total') + if np.any(array): + fract_list = array_to_dimming_fraction( + array, sun_up_hours, ill_setpoint, min_power_in, + min_light_out, off_at_min + ) + else: + fract_list = np.ones(8760) + dim_fracts.append(fract_list) + + schedules = [] + for grid_info, dim_fract in zip(grids_info, dim_fracts): + sch_vals = base_schedule * dim_fract + schedules.append(sch_vals) + + return schedules, grids_info
+ + +
+[docs] + def daylight_control_schedules_to_folder( + self, target_folder: str, states: DynamicSchedule = None, + grids_filter: str = '*', base_schedule: list = None, + ill_setpoint: float = 300, min_power_in: float = 0.3, + min_light_out: float = 0.2, off_at_min: bool = False): + """Generate electric lighting schedules from annual daylight results and + write the schedules to a folder. + + Such controls will dim the lights according to whether the illuminance values + at the sensor locations are at a target illuminance setpoint. The results can be + used to account for daylight controls in energy simulations. + + This function will generate one schedule per sensor grid in the simulation. Each + grid should have sensors at the locations in space where daylight dimming sensors + are located. Grids with one, two, or more sensors can be used to model setups + where fractions of each room are controlled by different sensors. If the sensor + grids are distributed over the entire floor of the rooms, the resulting schedules + will be idealized, where light dimming has been optimized to supply the minimum + illuminance setpoint everywhere in the room. + + Args: + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + base_schedule: A list of 8760 fractional values for the lighting schedule + representing the usage of lights without any daylight controls. The + values of this schedule will be multiplied by the hourly dimming + fraction to yield the output lighting schedules. If None, a schedule + from 9AM to 5PM on weekdays will be used. (Default: None). + ill_setpoint: A number for the illuminance setpoint in lux beyond which + electric lights are dimmed if there is sufficient daylight. + Some common setpoints are listed below. (Default: 300 lux). + + * 50 lux - Corridors and hallways. + * 150 lux - Computer work spaces (screens provide illumination). + * 300 lux - Paper work spaces (reading from surfaces that need illumination). + * 500 lux - Retail spaces or museums illuminating merchandise/artifacts. + * 1000 lux - Operating rooms and workshops where light is needed for safety. + + min_power_in: A number between 0 and 1 for the the lowest power the lighting + system can dim down to, expressed as a fraction of maximum + input power. (Default: 0.3). + min_light_out: A number between 0 and 1 the lowest lighting output the lighting + system can dim down to, expressed as a fraction of maximum light + output. Note that setting this to 1 means lights aren't dimmed at + all until the illuminance setpoint is reached. This can be used to + approximate manual light-switching behavior when used in conjunction + with the off_at_min input below. (Default: 0.2). + off_at_min: Boolean to note whether lights should switch off completely when + they get to the minimum power input. (Default: False). + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + schedules, grids_info = self.daylight_control_schedules( + states=states, grids_filter=grids_filter, + base_schedule=base_schedule, ill_setpoint=ill_setpoint, + min_power_in=min_power_in, min_light_out=min_light_out, + off_at_min=off_at_min) + + schedule_folder = folder.joinpath('control_schedules') + + for count, grid_info in enumerate(grids_info): + d = schedules[count] + full_id = grid_info['full_id'] + output_file = schedule_folder.joinpath(f'{full_id}.txt') + output_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(output_file, d, fmt='%.2f') + + info_file = schedule_folder.joinpath('grids_info.json') + info_file.write_text(json.dumps(grids_info))
+ + +
+[docs] + def annual_uniformity_ratio( + self, threshold: float = 0.5, states: DynamicSchedule = None, + grids_filter: str = '*') -> type_hints.annual_uniformity_ratio: + """Calculate annual uniformity ratio. + + Args: + threshold: A threshold for the uniformity ratio. Defaults to 0.5. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the annual uniformity ratio, annual + data collections, and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + analysis_period = AnalysisPeriod(timestep=self.timestep) + + data_collections = [] + annual_uniformity_ratio = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type='total') + if np.any(array): + su_min_array = array.min(axis=0) + su_mean_array = array.mean(axis=0) + su_uniformity_ratio = su_min_array / su_mean_array + + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=self.occ_mask) + min_array = array_filter.min(axis=0) + mean_array = array_filter.mean(axis=0) + uniformity_ratio = min_array / mean_array + annual_uniformity_ratio.append( + np.float64( + (uniformity_ratio >= threshold).sum() / self.total_occ * 100 + ) + ) + else: + su_uniformity_ratio = np.zeros(len(self.sun_up_hours)) + annual_uniformity_ratio.append(np.float64(0)) + + annual_array = \ + self.values_to_annual( + self.sun_up_hours, su_uniformity_ratio, self.timestep) + header = Header(Fraction(), '%', analysis_period) + header.metadata['sensor grid'] = grid_info['full_id'] + data_collections.append( + HourlyContinuousCollection(header, annual_array.tolist())) + + return annual_uniformity_ratio, data_collections, grids_info
+ + +
+[docs] + def annual_uniformity_ratio_to_folder( + self, target_folder: str, threshold: float = 0.5, + states: DynamicSchedule = None, grids_filter: str = '*' + ): + """Calculate annual uniformity ratio and write it to a folder. + + Args: + target_folder: Folder path to write annual uniformity ratio in. + threshold: A threshold for the uniformity ratio. Defaults to 0.5. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the daylight autonomy and grid information. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + annual_uniformity_ratio, data_collections, grids_info = \ + self.annual_uniformity_ratio(threshold=threshold, states=states, + grids_filter=grids_filter) + + datacollection_folder = folder.joinpath('datacollections') + uniformity_ratio_folder = folder.joinpath('uniformity_ratio') + + for aur, data_collection, grid_info in \ + zip(annual_uniformity_ratio, data_collections, grids_info): + grid_id = grid_info['full_id'] + data_dict = data_collection.to_dict() + data_file = datacollection_folder.joinpath(f'{grid_id}.json') + data_file.parent.mkdir(parents=True, exist_ok=True) + data_file.write_text(json.dumps(data_dict)) + + aur_file = uniformity_ratio_folder.joinpath(f'{grid_id}.ur') + aur_file.parent.mkdir(parents=True, exist_ok=True) + aur_file.write_text(str(round(aur, 2))) + + info_file = uniformity_ratio_folder.joinpath('grids_info.json') + info_file.write_text(json.dumps(grids_info))
+ + +
+[docs] + def dynamic_schedule_from_sensor_maximum( + self, sensor_index: dict, grids_filter: str = '*', + maximum: float = 3000, res_type: str = 'total') -> DynamicSchedule: + """Calculate a DynamicSchedule from a sensor and a maximum allowed + illuminance. + + Args: + sensor_index: A dictionary with grids as keys and a list of sensor + indices as values. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + maximum: A float value of the maximum illuminance allowed for the + sensor. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + DynamicSchedule object. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + + aperture_group_schedules = [] + for grid_info in grids_info: + control_sensor = sensor_index.get(grid_info['full_id'], None) + if control_sensor is None: + continue + assert len(control_sensor) == 1, ('Expected one control sensor for ' + f'grid {grid_info["name"]}. Received {len(control_sensor)} ' + 'control sensors.') + control_sensor_index = control_sensor[0] + + combinations = self._get_state_combinations(grid_info) + + array_list_combinations = [] + for combination in combinations: + combination_arrays = [] + for light_path, state_index in combination.items(): + array = self._get_array( + grid_info, light_path, state=state_index, res_type=res_type) + sensor_array = array[control_sensor_index,:] + combination_arrays.append(sensor_array) + combination_array = sum(combination_arrays) + array_list_combinations.append(combination_array) + array_combinations = np.array(array_list_combinations) + array_combinations[array_combinations > maximum] = -np.inf + max_indices = array_combinations.argmax(axis=0) + combinations = [combinations[idx] for idx in max_indices] + + states_schedule = defaultdict(list) + for combination in combinations: + for light_path, state_index in combination.items(): + if light_path != '__static_apertures__': + states_schedule[light_path].append(state_index) + + # map states to 8760 values + for light_path, state_indices in states_schedule.items(): + mapped_states = self.values_to_annual( + self.sun_up_hours, state_indices, self.timestep) + mapped_states = mapped_states.astype(int) + aperture_group_schedules.append( + ApertureGroupSchedule(light_path, mapped_states.tolist())) + + dyn_sch = DynamicSchedule.from_group_schedules(aperture_group_schedules) + + return dyn_sch
+
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/results/annual_irradiance.html b/docs/_modules/honeybee_radiance_postprocess/results/annual_irradiance.html new file mode 100644 index 00000000..b6fd7726 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/results/annual_irradiance.html @@ -0,0 +1,876 @@ + + + + + + + honeybee_radiance_postprocess.results.annual_irradiance — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.results.annual_irradiance

+import json
+from pathlib import Path
+import numpy as np
+
+from ladybug.datatype.energyflux import EnergyFlux
+
+from ..metrics import (average_values_array2d, cumulative_values_array2d,
+    peak_values_array2d)
+from ..util import filter_array, hoys_mask
+from ..annualirradiance import _annual_irradiance_vis_metadata
+from .. import type_hints
+from ..dynamic import DynamicSchedule
+from .results import Results
+
+
+
+[docs] +class AnnualIrradiance(Results): + """Annual Daylight Results class. + + Args: + folder: Path to results folder. + schedule: 8760 values as a list. Values must be either 0 or 1. Values of 1 + indicates occupied hours. If no schedule is provided a default schedule + will be used. (Default: None). + load_arrays: Set to True to load all NumPy arrays. If False the arrays will be + loaded only once they are needed. In both cases the loaded array(s) will be + stored in a dictionary under the arrays property. (Default: False). + + Properties: + * schedule + * occ_pattern + * total_occ + * sun_down_occ_hours + * occ_mask + * arrays + * valid_states + * datatype + """ + def __init__(self, folder, schedule: list = None, load_arrays: bool = False): + """Initialize Results.""" + Results.__init__(self, folder, datatype=EnergyFlux('Irradiance'), + schedule=schedule, unit='W/m2', load_arrays=load_arrays) + +
+[docs] + def cumulative_values( + self, hoys: list = [], states: DynamicSchedule = None, + t_step_multiplier: float = 1000, grids_filter: str = '*', + res_type: str = 'total') -> type_hints.cumulative_values: + """Get cumulative values for each sensor over a given period. + + The hoys input can be used to filter the data for a particular time + period. + + Args: + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + t_step_multiplier: A value that will be multiplied with the timestep. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with the cumulative value for each sensor and grid + information. + """ + cumulative_values, grids_info = \ + super(AnnualIrradiance, self).cumulative_values( + hoys=hoys, states=states, t_step_multiplier=t_step_multiplier, + grids_filter=grids_filter, res_type=res_type + ) + + return cumulative_values, grids_info
+ + +
+[docs] + def cumulative_values_to_folder( + self, target_folder: str, hoys: list = [], + states: DynamicSchedule = None, t_step_multiplier: float = 1000, + grids_filter: str = '*', res_type: str = 'total'): + """Get cumulative values for each sensor over a given period and write + the values to a folder. + + Args: + target_folder: Folder path to write annual metrics in. Usually this + folder is called 'metrics'. + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + t_step_multiplier: A value that will be multiplied with the timestep. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + """ + super(AnnualIrradiance, self).cumulative_values_to_folder( + target_folder, hoys=hoys, states=states, + t_step_multiplier=t_step_multiplier, grids_filter=grids_filter, + res_type=res_type + )
+ + +
+[docs] + def annual_metrics( + self, hoys: list = [], states: DynamicSchedule = None, + grids_filter: str = '*') -> type_hints.annual_irradiance_metrics: + """Calculate multiple annual irradiance metrics. + + This method will calculate the following metrics: + * Average Irradiance (W/m2) + * Peak Irradiance (W/m2) + * Cumulative Radiation (kWh/m2) + + Args: + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + Tuple: A tuple with the three annual irradiance metrics and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + mask = hoys_mask(self.sun_up_hours, hoys) + full_length = len(self.study_hours) + + average = [] + peak = [] + cumulative = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type='total') + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=mask) + average_results = average_values_array2d( + array_filter, full_length=full_length) + peak_results, max_i = peak_values_array2d( + array_filter) + cumulative_results = cumulative_values_array2d( + array_filter, self.timestep, 1000) + else: + average_results = peak_results = cumulative_results = \ + np.zeros(grid_info['count']) + average.append(average_results) + peak.append(peak_results) + cumulative.append(cumulative_results) + + return average, peak, cumulative, grids_info
+ + +
+[docs] + def annual_metrics_to_folder( + self, target_folder: str, hoys: list = [], + states: DynamicSchedule = None, grids_filter: str = '*'): + """Calculate and write multiple annual irradiance metrics to a folder. + + This command generates 3 files for each input grid. + * average_irradiance/{grid-name}.res -- Average Irradiance (W/m2) + * peak_irradiance/{grid-name}.res -- Peak Irradiance (W/m2) + * cumulative_radiation/{grid-name}.res -- Cumulative Radiation (kWh/m2) + + Args: + target_folder: Folder path to write annual metrics in. Usually this + folder is called 'metrics'. + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + average, peak, cumulative, grids_info = self.annual_metrics( + hoys=hoys, states=states, grids_filter=grids_filter) + + pattern = { + 'average_irradiance': average, 'peak_irradiance': peak, + 'cumulative_radiation': cumulative, + } + for metric, data in pattern.items(): + metric_folder = folder.joinpath(metric) + for count, grid_info in enumerate(grids_info): + d = data[count] + full_id = grid_info['full_id'] + output_file = metric_folder.joinpath(f'{full_id}.res') + output_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(output_file, d, fmt='%.2f') + + for metric in pattern.keys(): + info_file = folder.joinpath(metric, 'grids_info.json') + info_file.write_text(json.dumps(grids_info)) + + metric_info_dict = _annual_irradiance_vis_metadata() + for metric, data in metric_info_dict.items(): + vis_metadata_file = folder.joinpath(metric, 'vis_metadata.json') + vis_metadata_file.write_text(json.dumps(data, indent=4))
+
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/results/results.html b/docs/_modules/honeybee_radiance_postprocess/results/results.html new file mode 100644 index 00000000..ff9dc149 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/results/results.html @@ -0,0 +1,2082 @@ + + + + + + + honeybee_radiance_postprocess.results.results — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.results.results

+"""Post-processing Results class."""
+import json
+from pathlib import Path
+from itertools import islice, cycle
+from typing import Tuple, Union, List
+import numpy as np
+import itertools
+
+from ladybug.analysisperiod import AnalysisPeriod
+from ladybug.datacollection import HourlyContinuousCollection
+from ladybug.datatype.generic import GenericType
+from ladybug.datatype.base import DataTypeBase
+from ladybug.dt import DateTime
+from ladybug.header import Header
+
+from ..annual import occupancy_schedule_8_to_6
+from ..metrics import (average_values_array2d, cumulative_values_array2d,
+    peak_values_array2d)
+from ..util import filter_array, hoys_mask, check_array_dim, \
+    _filter_grids_by_pattern
+from .. import type_hints
+from ..dynamic import DynamicSchedule, ApertureGroupSchedule
+
+
+class _ResultsFolder(object):
+    """Base class for ResultsFolder.
+
+    This class includes properties that are independent of the results.
+
+    Args:
+        folder: Path to results folder.
+
+    Properties:
+        * folder
+        * grids_info
+        * sun_up_hours
+        * sun_down_hours
+        * light_paths
+        * default_states
+        * grid_states
+        * timestep
+        * study_hours
+
+    """
+    __slots__ = ('_folder', '_grids_info', '_sun_up_hours', '_sun_down_hours',
+                 '_sun_up_hours_mask', '_sun_down_hours_mask', '_datetimes',
+                 '_light_paths', '_default_states', '_grid_states', '_timestep',
+                 '_study_hours')
+
+    def __init__(self, folder: Union[str, Path]):
+        """Initialize ResultsFolder."""
+        self._folder = Path(folder).absolute().as_posix()
+        self._timestep, self._study_hours = self._get_study_info()
+        self.grids_info = self._get_grids_info()
+        self.sun_up_hours = self._get_sun_up_hours()
+        self._sun_up_hours_mask = self._get_sun_up_hours_mask()
+        self._sun_down_hours_mask = self._get_sun_down_hours_mask()
+        self._datetimes = self._get_datetimes()
+        self._light_paths = self._get_light_paths()
+        self._default_states = self._get_default_states()
+        self._grid_states = self._get_grid_states()
+
+    @property
+    def folder(self):
+        """Return full path to results folder as a string."""
+        return self._folder
+
+    @property
+    def grids_info(self):
+        """Return grids information as list of dictionaries for each grid."""
+        return self._grids_info
+
+    @grids_info.setter
+    def grids_info(self, grids_info):
+        assert isinstance(grids_info, list), \
+            f'Grids information must be a list. Got object of type: {type(grids_info)}.'
+        for grid_info in grids_info:
+            assert isinstance(grid_info, dict), \
+                'Object in grids information must be a dictionary. ' \
+                f'Got object of type {type(grid_info)}.'
+            if 'light_path' in grid_info.keys():
+                _grid_info = []
+                for light_path in grid_info['light_path']:
+                    if Path(self.folder, light_path[0]).exists():
+                        _grid_info.append((light_path))
+                grid_info['light_path'] = _grid_info
+                if not grid_info['light_path']:
+                    # if light path is empty
+                    grid_info['light_path'] = [['__static_apertures__']]
+            else:
+                # if light path key is nonexistent
+                grid_info['light_path'] = [['__static_apertures__']]
+        self._grids_info = grids_info
+
+    @property
+    def sun_up_hours(self):
+        """Return sun up hours."""
+        return self._sun_up_hours
+
+    @sun_up_hours.setter
+    def sun_up_hours(self, sun_up_hours):
+        assert isinstance(sun_up_hours, list), \
+            f'Sun up hours must be a list. Got object of type: {type(sun_up_hours)}'
+        self._sun_up_hours = sun_up_hours
+        self.sun_down_hours = np.setdiff1d(self.study_hours, sun_up_hours).tolist()
+
+    @property
+    def sun_up_hours_mask(self):
+        """Return sun up hours masking array."""
+        return self._sun_up_hours_mask
+
+    @property
+    def sun_down_hours(self):
+        """Return sun down hours."""
+        return self._sun_down_hours
+
+    @sun_down_hours.setter
+    def sun_down_hours(self, sun_down_hours):
+        assert isinstance(sun_down_hours, list), \
+            f'Sun down hours must be a list. Got object of type: {type(sun_down_hours)}'
+        self._sun_down_hours = sun_down_hours
+
+    @property
+    def sun_down_hours_mask(self):
+        """Return sun down hours masking array."""
+        return self._sun_down_hours_mask
+
+    @property
+    def datetimes(self):
+        """Return DateTimes for sun up hours."""
+        return self._datetimes
+
+    @property
+    def light_paths(self):
+        """Return the identifiers of the light paths."""
+        return self._light_paths
+
+    @property
+    def default_states(self):
+        """Return default states as a dictionary."""
+        return self._default_states
+
+    @property
+    def grid_states(self):
+        """Return grid states as a dictionary."""
+        return self._grid_states
+
+    @property
+    def timestep(self):
+        """Return timestep as an integer."""
+        return self._timestep
+
+    @property
+    def study_hours(self):
+        """Return study hours as a list."""
+        return self._study_hours
+
+    def _get_light_paths(self) -> list:
+        """Find all light paths in grids_info."""
+        lp = []
+        for grid_info in self.grids_info:
+            try:
+                light_paths = grid_info['light_path']
+            except KeyError:
+                grid_info['light_path'] = [['__static_apertures__']]
+                light_paths = grid_info['light_path']
+            for light_path in light_paths:
+                for elem in light_path:
+                    if elem in lp:
+                        continue
+                    if elem == '__static_apertures__':
+                        lp.insert(0, elem)
+                    else:
+                        lp.append(elem)
+            if not light_paths and '__static_apertures__' not in lp:
+                lp.insert(0, '__static_apertures__')
+
+        return lp
+
+    def _get_default_states(self) -> dict:
+        """Set default state to 0 for all light paths."""
+        default_states = {}
+        for light_path in self.light_paths:
+            default_states[light_path] = [0]
+        return default_states
+
+    def _get_grid_states(self) -> dict:
+        """Read grid_states.json if available."""
+        info = Path(self.folder, 'grid_states.json')
+        if info.is_file():
+            with open(info) as data_f:
+                data = json.load(data_f)
+            return data
+        else:
+            # only static results
+            return {}
+
+    def _get_study_info(self) -> Tuple[int, list]:
+        """Read study info file."""
+        study_info_file = Path(self.folder).joinpath('study_info.json')
+        if study_info_file.exists():
+            with open(study_info_file) as file:
+                study_info = json.load(file)
+            if study_info['timestep'] == 1:
+                study_info['study_hours'] = \
+                    list(map(int, study_info['study_hours']))
+        else:
+            study_info = {}
+            study_info['timestep'] = 1
+            study_info['study_hours'] = AnalysisPeriod().hoys
+
+        return study_info['timestep'], study_info['study_hours']
+
+    def _get_datetimes(self) -> List[DateTime]:
+        """Get a list of DateTimes of the sun up hours."""
+        datetimes = [
+            DateTime.from_hoy(hoy) for hoy in list(map(float, self.sun_up_hours))
+            ]
+
+        return datetimes
+
+    def _get_grids_info(self) -> List[dict]:
+        """Get grids info from folder."""
+        info = Path(self.folder, 'grids_info.json')
+        with open(info) as data_f:
+            grids = json.load(data_f)
+
+        return grids
+
+    def _get_sun_up_hours(self) -> List[float]:
+        """Get sun up hours from folder."""
+        suh_fp = Path(self.folder, 'sun-up-hours.txt')
+        sun_up_hours = np.loadtxt(suh_fp, dtype=float).tolist()
+        if self.timestep == 1:
+            sun_up_hours = list(map(int, sun_up_hours))
+
+        return sun_up_hours
+
+    def _get_sun_up_hours_mask(self) -> List[int]:
+        """Get a sun up hours masking array of the study hours."""
+        sun_up_hours_mask = \
+            np.where(np.isin(self.study_hours, self.sun_up_hours))[0]
+
+        return sun_up_hours_mask
+
+    def _get_sun_down_hours_mask(self) -> List[int]:
+        """Get a sun down hours masking array of the study hours."""
+        sun_down_hours_mask = \
+            np.where(~np.isin(self.study_hours, self.sun_up_hours))[0]
+
+        return sun_down_hours_mask
+
+    def __repr__(self):
+        return f'{self.__class__.__name__}: {self.folder}'
+
+
+
+[docs] +class Results(_ResultsFolder): + """Results class. + + Args: + folder: Path to results folder. + schedule: 8760 values as a list. Values must be either 0 or 1. Values of 1 + indicates occupied hours. If no schedule is provided a default schedule + will be used. (Default: None). + load_arrays: Set to True to load all NumPy arrays. If False the arrays will be + loaded only once they are needed. In both cases the loaded array(s) will be + stored in a dictionary under the arrays property. (Default: False). + + Properties: + * schedule + * occ_pattern + * total_occ + * sun_down_occ_hours + * occ_mask + * arrays + * valid_states + * datatype + * unit + """ + __slots__ = ('_schedule', '_occ_pattern', '_total_occ', '_sun_down_occ_hours', + '_occ_mask', '_arrays', '_valid_states', '_datatype', '_unit') + + def __init__(self, folder, datatype: DataTypeBase = None, + schedule: list = None, unit: str = None, + load_arrays: bool = False): + """Initialize Results.""" + _ResultsFolder.__init__(self, folder) + self.schedule = schedule + self._arrays = self._load_arrays() if load_arrays else {} + self._valid_states = self._get_valid_states() + self.datatype = datatype + self.unit = unit + + @property + def schedule(self): + """Return schedule.""" + return self._schedule + + @schedule.setter + def schedule(self, schedule): + self._schedule = schedule if schedule else \ + occupancy_schedule_8_to_6(timestep=self.timestep, as_list=True) + self._update_occ() + + @property + def occ_pattern(self): + """Return a filtered version of the annual schedule that only includes the + sun-up-hours.""" + return self._occ_pattern + + @property + def total_occ(self): + """Return an integer for the total occupied hours of the schedule.""" + return self._total_occ + + @property + def sun_down_occ_hours(self): + """Return an integer for the number of occupied hours where the sun is down and + there's no possibility of being daylit or experiencing glare.""" + return self._sun_down_occ_hours + + @property + def occ_mask(self): + """Return an occupancy mask as a NumPy array that can be used to mask the + results.""" + return self._occ_mask + + @property + def arrays(self): + """Return a dictionary of all the NumPy arrays that have been loaded.""" + return self._arrays + + @arrays.setter + def arrays(self, value): + self._arrays = value + + @property + def valid_states(self): + """Return a dictionary with valid states. Each light path is represented by a + key-value pair where the light path identifier is the key and the value is a list + of valid states, e.g., [0, 1, 2, ...].""" + return self._valid_states + + @property + def datatype(self): + """Return a Ladybug DataType object.""" + return self._datatype + + @datatype.setter + def datatype(self, value): + if value is not None: + assert isinstance(value, DataTypeBase), \ + f'data_type must be a Ladybug DataType. Got {type(value)}' + else: + value = GenericType('Generic', '') + self._datatype = value + + @property + def unit(self): + """Return unit of hourly values.""" + return self._unit + + @unit.setter + def unit(self, value): + self._unit = value + +
+[docs] + def total( + self, hoys: list = [], states: DynamicSchedule = None, + grids_filter: str = '*', res_type: str = 'total' + ) -> type_hints.total: + """Get summed values for each sensor. + + Args: + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with total values and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + mask = hoys_mask(self.sun_up_hours, hoys) + + total = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type=res_type) + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=mask + ) + array_total = array_filter.sum(axis=1) + else: + array_total = np.zeros(grid_info['count']) + total.append(array_total) + + return total, grids_info
+ + +
+[docs] + def point_in_time( + self, datetime: Union[float, DateTime], states: DynamicSchedule = None, + grids_filter: str = '*', res_type: str = 'total' + ) -> type_hints.point_in_time: + """Get point in time values. + + Args: + datetime: Hour of the year as a float or DateTime object. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with point in time values and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + + if isinstance(datetime, float): + dt = DateTime.from_hoy(datetime) + elif isinstance(datetime, DateTime): + dt = datetime + else: + error_message = ( + f'Input datetime must be of type {int} or {DateTime}. ' + f'Received {type(DateTime)}.' + ) + raise ValueError(error_message) + + idx = self._index_from_datetime(dt) + + pit_values = [] + for grid_info in grids_info: + if idx: + array = self._array_from_states( + grid_info, states=states, res_type=res_type) + pit_values.append(array[:, idx]) + else: + # datetime not in sun up hours, add zeros + pit_values.append(np.zeros(grid_info['count'])) + + return pit_values, grids_info
+ + +
+[docs] + def point_in_time_to_folder( + self, target_folder: str, datetime: Union[float, DateTime], + states: DynamicSchedule = None, grids_filter: str = '*', + res_type: str = 'total' + ) -> type_hints.point_in_time: + """Get point in time values and write the values to a folder. + + Args: + target_folder: Folder path to write annual metrics in. Usually this + folder is called 'metrics'. + datetime: Hour of the year as a float or DateTime object. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with point in time values and grid information. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + pit_values, grids_info = self.point_in_time( + datetime=datetime, states=states, + grids_filter=grids_filter, res_type=res_type) + + metric_folder = folder.joinpath('point_in_time') + + for count, grid_info in enumerate(grids_info): + d = pit_values[count] + full_id = grid_info['full_id'] + output_file = metric_folder.joinpath(f'{full_id}.pit') + output_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(output_file, d, fmt='%.2f') + + info_file = metric_folder.joinpath('grids_info.json') + info_file.write_text(json.dumps(grids_info)) + + return pit_values, grids_info
+ + +
+[docs] + def average_values( + self, hoys: list = [], states: DynamicSchedule = None, grids_filter: str = '*', + res_type: str = 'total') -> type_hints.average_values: + """Get average values for each sensor over a given period. + + The hoys input can be used to filter the data for a particular time + period. + + Args: + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with the average value for each sensor and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + full_length = len(self.study_hours) if len(hoys) == 0 else len(hoys) + mask = hoys_mask(self.sun_up_hours, hoys) + + average_values = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type=res_type) + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=mask) + results = average_values_array2d( + array_filter, full_length) + else: + results = np.zeros(grid_info['count']) + average_values.append(results) + + return average_values, grids_info
+ + +
+[docs] + def average_values_to_folder( + self, target_folder: str, hoys: list = [], states: DynamicSchedule = None, + grids_filter: str = '*', res_type: str = 'total'): + """Get average values for each sensor over a given period and write the + values to a folder. + + Args: + target_folder: Folder path to write annual metrics in. Usually this + folder is called 'metrics'. + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + average_values, grids_info = self.average_values( + hoys=hoys, states=states, + grids_filter=grids_filter, res_type=res_type) + + metric_folder = folder.joinpath('average_values') + + for count, grid_info in enumerate(grids_info): + d = average_values[count] + full_id = grid_info['full_id'] + output_file = metric_folder.joinpath(f'{full_id}.average') + output_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(output_file, d, fmt='%.2f') + + info_file = metric_folder.joinpath('grids_info.json') + info_file.write_text(json.dumps(grids_info))
+ + +
+[docs] + def median_values( + self, hoys: list = [], states: dict = None, grids_filter: str = '*', + res_type: str = 'total') -> type_hints.median_values: + """Get median values for each sensor over a given period. + + The hoys input can be used to filter the data for a particular time + period. If hoys is left empty the median values will likely be 0 since + there are likely more sun down hours than sun up hours. + + Args: + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with the median value for each sensor and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + mask = hoys_mask(self.sun_up_hours, hoys) + + median_values = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type=res_type) + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=mask) + if not hoys: + # concatenate zero array + zero_array = \ + np.zeros((grid_info['count'], len(self.sun_down_hours))) + array_filter = np.concatenate((array_filter, zero_array), axis=1) + else: + # find number of hoys that are sun down hours + sdh_hoys = \ + len(set(self.sun_down_hours).intersection(hoys)) + if sdh_hoys != 0: + # concatenate zero array + zero_array = np.zeros((grid_info['count'], sdh_hoys)) + array_filter = \ + np.concatenate((array_filter, zero_array), axis=1) + results = np.median(array_filter, axis=1) + else: + results = np.zeros(grid_info['count']) + median_values.append(results) + + return median_values, grids_info
+ + +
+[docs] + def median_values_to_folder( + self, target_folder: str, hoys: list = [], states: dict = None, + grids_filter: str = '*', res_type: str = 'total'): + """Get median values for each sensor over a given period and write the + values to a folder. + + Args: + target_folder: Folder path to write annual metrics in. Usually this + folder is called 'metrics'. + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + median_values, grids_info = self.median_values( + hoys=hoys, states=states, + grids_filter=grids_filter, res_type=res_type) + + metric_folder = folder.joinpath('median_values') + + for count, grid_info in enumerate(grids_info): + d = median_values[count] + full_id = grid_info['full_id'] + output_file = metric_folder.joinpath(f'{full_id}.median') + output_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(output_file, d, fmt='%.2f') + + info_file = metric_folder.joinpath('grids_info.json') + info_file.write_text(json.dumps(grids_info))
+ + +
+[docs] + def cumulative_values( + self, hoys: list = [], states: DynamicSchedule = None, + t_step_multiplier: float = 1, grids_filter: str = '*', + res_type: str = 'total') -> type_hints.cumulative_values: + """Get cumulative values for each sensor over a given period. + + The hoys input can be used to filter the data for a particular time + period. + + Args: + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + t_step_multiplier: A value that will be multiplied with the timestep. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with the cumulative value for each sensor and grid + information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + mask = hoys_mask(self.sun_up_hours, hoys) + + cumulative_values = [] + for grid_info in grids_info: + array = self._array_from_states(grid_info, states=states, res_type=res_type) + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=mask) + results = cumulative_values_array2d( + array_filter, self.timestep, t_step_multiplier) + else: + results = np.zeros(grid_info['count']) + cumulative_values.append(results) + + return cumulative_values, grids_info
+ + +
+[docs] + def cumulative_values_to_folder( + self, target_folder: str, hoys: list = [], + states: DynamicSchedule = None, t_step_multiplier: float = 1, + grids_filter: str = '*', res_type: str = 'total'): + """Get cumulative values for each sensor over a given period and write + the values to a folder. + + Args: + target_folder: Folder path to write annual metrics in. Usually this + folder is called 'metrics'. + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + t_step_multiplier: A value that will be multiplied with the timestep. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + res_type: Type of results to load. Defaults to 'total'. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + cumulative_values, grids_info = self.cumulative_values( + hoys=hoys, states=states, t_step_multiplier=t_step_multiplier, + grids_filter=grids_filter, res_type=res_type + ) + + metric_folder = folder.joinpath('cumulative_values') + + for count, grid_info in enumerate(grids_info): + d = cumulative_values[count] + full_id = grid_info['full_id'] + output_file = metric_folder.joinpath(f'{full_id}.cumulative') + output_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(output_file, d, fmt='%.2f') + + info_file = metric_folder.joinpath('grids_info.json') + info_file.write_text(json.dumps(grids_info))
+ + +
+[docs] + def peak_values( + self, hoys: list = [], states: DynamicSchedule = None, grids_filter: str = '*', + coincident: bool = False, res_type: str = 'total' + ) -> type_hints.peak_values: + """Get peak values for each sensor over a given period. + + The hoys input can be used to filter the data for a particular time + period. + + Args: + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + coincident: Boolean to indicate whether output values represent the peak + value for each sensor throughout the entire analysis (False) or they + represent the highest overall value across each sensor grid at a + particular timestep (True). Defaults to False. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with the peak value for each sensor and grid information. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + mask = hoys_mask(self.sun_up_hours, hoys) + filt_suh = hoys if len(hoys) != 0 else self.sun_up_hours + + peak_values = [] + max_hoys = [] + for grid_info in grids_info: + max_i = None + array = self._array_from_states(grid_info, states=states, res_type=res_type) + if np.any(array): + array_filter = np.apply_along_axis( + filter_array, 1, array, mask=mask) + results, max_i = peak_values_array2d( + array_filter, coincident=coincident) + else: + results = np.zeros(grid_info['count']) + peak_values.append(results) + if max_i: + max_hoys.append(filt_suh[max_i]) + else: + max_hoys.append(None) + + return peak_values, max_hoys, grids_info
+ + +
+[docs] + def peak_values_to_folder( + self, target_folder: str, hoys: list = [], states: DynamicSchedule = None, + grids_filter: str = '*', coincident: bool = False, res_type='total'): + """Get peak values for each sensor over a given period and write the + values to a folder. + + Args: + target_folder: Folder path to write peak values in. Usually this + folder is called 'metrics'. + hoys: An optional numbers or list of numbers to select the hours of + the year (HOYs) for which results will be computed. Defaults to []. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + coincident: Boolean to indicate whether output values represent the peak + value for each sensor throughout the entire analysis (False) or they + represent the highest overall value across each sensor grid at a + particular timestep (True). Defaults to False. + res_type: Type of results to load. Defaults to 'total'. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + peak_values, max_hoys, grids_info = self.peak_values( + hoys=hoys, states=states, grids_filter=grids_filter, + coincident=coincident, res_type=res_type) + + metric_folder = folder.joinpath('peak_values') + + for count, grid_info in enumerate(grids_info): + d = peak_values[count] + full_id = grid_info['full_id'] + output_file = metric_folder.joinpath(f'{full_id}.peak') + output_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(output_file, d, fmt='%.2f') + + max_hoys_file = metric_folder.joinpath('max_hoys.txt') + max_hoys_file.write_text('\n'.join(str(h) for h in max_hoys)) + + info_file = metric_folder.joinpath('grids_info.json') + info_file.write_text(json.dumps(grids_info))
+ + + def _array_to_annual_data( + self, grid_info, states: DynamicSchedule = None, + sensor_index: list = None, res_type: str = 'total' + ) -> Tuple[List[HourlyContinuousCollection], dict, list]: + """Get annual data for one or multiple sensors. + + Args: + grid_info: Grid information of the grid. + states: A dictionary of states. Defaults to None. + sensor_index: A list of sensor indices as integers. Defaults to None. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with Data Collections for each sensor, grid information, + and a list of the sensors. + """ + analysis_period = AnalysisPeriod(timestep=self.timestep) + + # if no sensor_index, create list with all sensors + if not sensor_index: + sensor_index = [range(grid_info['count'])] + + data_collections = [] + array = self._array_from_states(grid_info, states=states, res_type=res_type) + for idx in sensor_index: + if np.any(array): + values = array[idx, :] + else: + values = np.zeros(len(self.sun_up_hours)) + annual_array = Results.values_to_annual( + self.sun_up_hours, values, self.timestep, self.study_hours) + header = Header(self.datatype, self.unit, analysis_period) + header.metadata['sensor grid'] = grid_info['full_id'] + header.metadata['sensor index'] = idx + data_collections.append( + HourlyContinuousCollection(header, annual_array.tolist())) + + return data_collections, grid_info, sensor_index + +
+[docs] + def annual_data( + self, states: DynamicSchedule = None, grids_filter: str = '*', + sensor_index: dict = None, res_type: str = 'total' + ) -> type_hints.annual_data: + """Get annual data for one or multiple sensors. + + Args: + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + sensor_index: A dictionary with grids as keys and a list of sensor + indices as values. Defaults to None. + res_type: Type of results to load. Defaults to 'total'. + + Returns: + Tuple: A tuple with Data Collections for each sensor, grid information, + and a dictionary of the sensors. + """ + grids_info = self._filter_grids(grids_filter=grids_filter) + analysis_period = AnalysisPeriod(timestep=self.timestep) + + # if no sensor_index, create dict with all sensors + if not sensor_index: + sensor_index = {} + for grid_info in grids_info: + sensor_index[grid_info['full_id']] = \ + [i for i in range(grid_info['count'])] + + data_collections = [] + for grid_info in grids_info: + data_collections_grid = [] + grid_id = grid_info['full_id'] + array = self._array_from_states(grid_info, states=states, res_type=res_type) + indices = sensor_index[grid_id] + for idx in indices: + if np.any(array): + values = array[idx, :] + else: + values = np.zeros(len(self.sun_up_hours)) + annual_array = Results.values_to_annual( + self.sun_up_hours, values, self.timestep) + header = Header(self.datatype, self.unit, analysis_period) + header.metadata['sensor grid'] = grid_id + header.metadata['sensor index'] = idx + data_collections_grid.append( + HourlyContinuousCollection(header, annual_array.tolist())) + data_collections.append(data_collections_grid) + + return data_collections, grids_info, sensor_index
+ + +
+[docs] + def annual_data_to_folder( + self, target_folder: str, states: DynamicSchedule = None, grids_filter: str = '*', + sensor_index: dict = None, res_type: str = 'total'): + """Get annual data for one or multiple sensors and write the data to a + folder as Data Collections. + + Args: + target_folder: Folder path to write annual metrics in. Usually this + folder is called 'metrics'. + states: A dictionary of states. Defaults to None. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + sensor_index: A dictionary with grids as keys and a list of sensor + indices as values. Defaults to None. + res_type: Type of results to load. Defaults to 'total'. + """ + folder = Path(target_folder) + folder.mkdir(parents=True, exist_ok=True) + + data_collections, grids_info, sensor_index = self.annual_data( + states=states, grids_filter=grids_filter, sensor_index=sensor_index, + res_type=res_type) + + metric_folder = folder.joinpath('datacollections') + + for count, grid_info in enumerate(grids_info): + grid_collections = data_collections[count] + for data_collection in grid_collections: + grid_id = grid_info['full_id'] + sensor_id = data_collection.header.metadata['sensor index'] + data_dict = data_collection.to_dict() + data_file = metric_folder.joinpath(f'{grid_id}_{sensor_id}.json') + data_file.parent.mkdir(parents=True, exist_ok=True) + data_file.write_text(json.dumps(data_dict))
+ + +
+[docs] + @staticmethod + def values_to_annual( + hours: Union[List[float], np.ndarray], + values: Union[List[float], np.ndarray], + timestep: int, base_value: int = 0, + dtype: np.dtype = np.float32) -> np.ndarray: + """Map a 1D NumPy array based on a set of hours to an annual array. + + This method creates an array with a base value of length 8760 and + replaces the base value with the input 'values' at the indices of the + input 'hours'. + + Args: + hours: A list of hours. This can be a regular list or a 1D NumPy + array. + values: A list of values to map to an annual array. This can be a + regular list or a 1D NumPy array. + timestep: Time step of the simulation. + base_value: A value that will be applied for all the base array. + dtype: A NumPy dtype for the annual array. + + Returns: + A 1D NumPy array. + """ + values = np.array(values) + check_array_dim(values, 1) + hours = np.array(hours) + assert hours.shape == values.shape + full_ap = AnalysisPeriod(timestep=timestep) + indices = np.where(np.isin(full_ap.hoys, hours))[0] + annual_array = np.repeat(base_value, 8760 * timestep).astype(dtype) + annual_array[indices] = values + + return annual_array
+ + + def _index_from_datetime(self, datetime: DateTime) -> Union[int, None]: + """Returns the index of the input datetime in the list of datetimes + from the datetimes property. + + If the DateTime is not in the list, the function will return None. + + Args: + datetime: A DateTime object. + + Returns: + Index as an integer or None. + """ + assert isinstance(datetime, DateTime), \ + f'Expected DateTime object but received {type(datetime)}' + try: + index = self.datetimes.index(datetime) + except Exception: + # DateTime not in sun up hours + index = None + + return index + + def _get_array( + self, grid_info: dict, light_path: str, state: int = 0, + res_type: str = 'total', extension: str = '.npy') -> np.ndarray: + """Get an array for a given grid, light path, and state. + + The array will be fetched from the 'arrays' property if it has been + loaded already. + + Args: + grid_info: Grid information. + light_path: Identifier of the light path. + state: State as an integer. E.g., 0 for the default state. + Defaults to 0. + res_type: Type of results to load. Defaults to 'total'. + extension: File extension of the array to load. Defaults to '.npy'. + + Returns: + np.ndarray: A NumPy array of a given grid, light path, and state. + """ + grid_id = grid_info['full_id'] + + state_identifier = self._state_identifier(grid_id, light_path, state=state) + + try: + array = self.arrays[grid_id][light_path][state_identifier][res_type] + except Exception: + array = self._load_array( + grid_info, light_path, state=state, res_type=res_type, + extension=extension + ) + + return array + + def _load_array( + self, grid_info: dict, light_path: str, state: int = 0, + res_type: str = 'total', extension: str = '.npy') -> np.ndarray: + """Load a NumPy file to an array. + + This method will also update the arrays property value. + + Args: + grid_info: Grid information. + light_path: Identifier of the light path. + state: State as an integer. E.g., 0 for the default state. + Defaults to 0. + res_type: Which type of result to return a file for. E.g., 'total' for total + illuminance or 'direct' for direct illuminance. + extension: File extension of the array to load. Defaults to '.npy'. + + Returns: + np.ndarray: A NumPy array of a given grid, light path, and state + from a NumPy file. + """ + grid_id = grid_info['full_id'] + + def merge_dicts(array_dict, arrays): + for key, value in array_dict.items(): + if isinstance(value, dict): + node = arrays.setdefault(key, {}) + merge_dicts(value, node) + else: + arrays[key] = value + return arrays + + state_identifier = self._state_identifier(grid_id, light_path, state=state) + file = self._get_file(grid_id, light_path, state_identifier, res_type, + extension=extension) + array = np.load(file) + + array_dict = {grid_id: {light_path: {state_identifier: {res_type: array}}}} + arrays = merge_dicts(array_dict, self.arrays) + self.arrays = arrays + + return array + + def _state_identifier( + self, grid_id: str, light_path: str, state: int = 0) -> Union[str, None]: + """Get the state identifier from a light path and state integer. + + Args: + grid_id: Grid identifier. + light_path: Identifier of the light path. + state: State as an integer. E.g., 0 for the default state. + Defaults to 0. + + Returns: + State identifier. For static apertures the identifier is 'default', + and for other light paths it is the light path identifier preceded + by the state integer, e.g., '0_light_path'. If the state is -1 the + state identifier will be None. + """ + # TODO: Figure out if there is a better way to handle the states. + # I.e., state integer <--> state identifier. + valid_states = self.valid_states[light_path] + if state in valid_states: + if light_path == '__static_apertures__': + state_identifier = 'default' + else: + state_identifier = self.grid_states[grid_id][light_path][state] + return state_identifier + elif state == -1: + return None + else: + error_message = ( + f'State of {light_path} must be any of {valid_states} for on ' + f'or -1 for off. Received state {state}.' + ) + raise ValueError(error_message) + + def _get_file( + self, grid_id: str, light_path: str, state_identifier: str, + res_type: str = 'total', extension: str = '.npy') -> Path: + """Return the path of a results file. + + Args: + grid_id: Grid identifier. + light_path: Identifier of the light path. + state_identifier: State identifier. + res_type: Which type of result to return a file for. E.g., 'total' for total + illuminance or 'direct' for direct illuminance. + extension: File extension of the array to load. Defaults to '.npy'. + + Returns: + Path to a NumPy file. + """ + file = Path(self.folder, light_path, state_identifier, + res_type, grid_id + extension) + if not file.is_file(): + raise FileNotFoundError(f'File {file} not found in the results folder.') + + return file + + def _validate_dynamic_states(self, states: dict) -> dict: + """Validate dynamic states and return states dictionary. + + If all light paths in the dictionary have 8760 values, the states + dictionary is returned as is. If some light paths have less than 8760 + values, pattern of values will be repeated until it reaches a length of + 8760. + + Args: + states: A dictionary of states. + + Returns: + dict: A dictionary of states. + """ + if all(len(values) == 8760 for values in states.values()): + return states + for light_path, values in states.items(): + if len(values) < 8760: + states[light_path] = list(islice(cycle(values), 8760)) + elif len(values) > 8760: + error_message = ( + f'The light path {light_path} has {len(values)} values in ' + f'its states schedule. Maximum allowed number of values ' + f'is 8760.' + ) + raise ValueError(error_message) + + return states + + def _validate_states(self, states: dict) -> dict: + """Validate states and return states dictionary. + + If all light paths in the dictionary have integers only as values, the + states dictionary is returned as is. If some light paths have values + that are not integers, these values will be mapped as integers if + possible, e.g., if the values are strings ('0', '1', etc.) instead of + integers. + + Args: + states: A dictionary of states. + + Returns: + dict: A dictionary of states. + """ + if all(isinstance(v, int) for values in states.values() for v in values): + return states + for light_path, values in states.items(): + try: + states[light_path] = list(map(int, values)) + except ValueError as err: + error_message = ( + f'Failed to convert states schedule for light path ' + f'{light_path} to integers.' + ) + raise ValueError(error_message) from err + + return states + + def _filter_grid_states(self, grid_info, states: DynamicSchedule = None) -> DynamicSchedule: + """Filter a dictionary of states by grid. Only light paths relevant to + the given grid will be returned. + + Args: + grid_info: Grid information. + states: A dictionary of states. Light paths as keys and lists of + 8760 values for each key. The values should be integers + matching the states or -1 for off. Default to None. + + Returns: + dict: A filtered states dictionary. + """ + light_paths = [elem for lp in grid_info['light_path'] for elem in lp] + if states: + states = states.filter_by_identifiers(light_paths) + else: + default_states = self.default_states + states = DynamicSchedule() + for light_path in light_paths: + ap_group_schedule = ApertureGroupSchedule( + light_path, default_states[light_path], is_static=True) + states.add_aperture_group_schedule(ap_group_schedule) + + return states + + def _array_from_states( + self, grid_info, states: DynamicSchedule = None, + res_type: str = 'total', zero_array: bool = False + ) -> np.ndarray: + """Create an array for a given grid by the states settings. + + Args: + grid_info: Grid information of the grid. + states: A dictionary of states. Light paths as keys and lists of 8760 values + for each key. The values should be integers matching the states or -1 for + off. + res_type: Which type of result to create an array for. E.g., 'total' + for total illuminance or 'direct' for direct illuminance. + zero_array: Boolean to note if a 2D zero array should be created if + the array of the grid is zero. This is the case if the + illuminance of the grid is zero. (Default: False). + + Returns: + A NumPy array based on the states settings. + """ + # get states that are relevant for the grid + states = self._filter_grid_states(grid_info, states=states) + + arrays = [] + for light_path, gr_schedule in states.dynamic_schedule.items(): + if gr_schedule.is_static: + state = gr_schedule.schedule[0] + # if state is -1 we continue since it is "turned off" + if state == -1: + continue + # load static array (state is static) + array = self._get_array( + grid_info, light_path, state=state, res_type=res_type) + arrays.append(array) + else: + # create default 0 array, we will add to this later + array = np.zeros((grid_info['count'], len(self.sun_up_hours))) + # slice states to match sun up hours + states_array = np.array(gr_schedule.schedule)[ + list(map(int, self.sun_up_hours))] + for state in np.unique(states_array): + if state == -1: + # if state is -1 we continue since it is "turned off" + continue + # load static array (state is static) + _array = self._get_array( + grid_info, light_path, state=state, res_type=res_type) + # get indices and add values to base array + states_indicies = states_array == state + array[:, states_indicies] += _array[:, states_indicies] + arrays.append(array) + array = sum(arrays) + + if not np.any(array): + if zero_array: + array = np.zeros((grid_info['count'], len(self.sun_up_hours))) + else: + array = np.array([]) + + return array + + def _update_occ(self): + """Set properties related to occupancy.""" + occ_mask = np.array(self.schedule, dtype=int)[self.sun_up_hours_mask] + sun_down_sch = \ + np.array(self.schedule, dtype=int)[self.sun_down_hours_mask].sum() + + self._occ_mask = occ_mask + self._total_occ = sum(self.schedule) + self._sun_down_occ_hours = sun_down_sch + + def _filter_grids(self, grids_filter: str = '*') -> list: + """Return grids information. + + Args: + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + + Returns: + list: List of grid information for filtered grids. + """ + if grids_filter != '*': + grids_info = \ + _filter_grids_by_pattern(self.grids_info, grids_filter) + else: + grids_info = self.grids_info + + return grids_info + + def _load_arrays(self) -> dict: + """Load all the NumPy arrays in the results folder.""" + arrays = {} + grids_info = self.grids_info + + for grid_info in grids_info: + grid_id = grid_info['full_id'] + light_paths = grid_info['light_path'] + arrays[grid_id] = {} + for light_path in light_paths: + light_path = light_path[0] + arrays[grid_id][light_path] = {} + light_path_folder = Path(self.folder, light_path) + for state_folder in Path(light_path_folder).iterdir(): + state = state_folder.name + arrays[grid_id][light_path][state] = {} + for res_type_folder in Path(state_folder).iterdir(): + res_type = res_type_folder.name + file = Path(res_type_folder, grid_id + '.npy') + array = np.load(file) + arrays[grid_id][light_path][state][res_type] = array + + return arrays + + def _get_valid_states(self) -> dict: + """Returns a dictionary with valid states for each light path. + + For each light path there will be a key (identifier of the light path) + and its value will be a list of valid states as integers. + + Example of output format: + { + '__static_apertures__': [0], + 'Room1_North': [0, 1], + 'Room1_South': [0, 1], + 'Room2_North1': [0, 1], + 'Room2_North2': [0, 1] + } + + Returns: + dict: Valid states integers for each light path. + """ + valid_states = {} + grid_states = self.grid_states + if '__static_apertures__' in self.light_paths: + valid_states['__static_apertures__'] = [0] + for light_paths in grid_states.values(): + for light_path, states in light_paths.items(): + if light_path not in valid_states: + valid_states[light_path] = list(range(len(states))) + + return valid_states + + def _light_paths_from_grid_info(self, grid_info: Union[dict, str]) -> list: + if isinstance(grid_info, str): + for _grid_info in self.grids_info: + if _grid_info['full_id'] == grid_info: + grid_info = _grid_info + break + else: + raise Exception(f'Grid info with full_id "{grid_info}" not found.') + light_paths = [elem for lp in grid_info['light_path'] for elem in lp] + + return light_paths + + def _get_state_combinations(self, grid_info: Union[dict, str]) -> List[dict]: + light_paths = self._light_paths_from_grid_info(grid_info) + valid_states = self._get_valid_states() + filtered_states = {lp: valid_states[lp] for lp in light_paths} + keys, values = zip(*filtered_states.items()) + combinations = [dict(zip(keys, v)) for v in itertools.product(*values)] + + return combinations
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/util.html b/docs/_modules/honeybee_radiance_postprocess/util.html new file mode 100644 index 00000000..15e30dc6 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/util.html @@ -0,0 +1,876 @@ + + + + + + + honeybee_radiance_postprocess.util — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.util

+"""Post-processing utility functions."""
+from typing import Tuple
+import numpy as np
+
+from honeybee_radiance.writer import _filter_by_pattern
+
+
+
+[docs] +def binary_mtx_dimension(filepath: str) -> Tuple[int, int, int, int, str]: + """Return binary Radiance matrix dimensions if exist. + + This function returns NROWS, NCOLS, NCOMP and number of header lines including the + white line after last header line. + + Args: + filepath: Full path to Radiance file. + + Returns: + nrows, ncols, ncomp, line_count, fmt + """ + try: + inf = open(filepath, 'rb', encoding='utf-8') + except Exception: + inf = open(filepath, 'rb') + try: + first_line = next(inf).rstrip().decode('utf-8') + if first_line[:10] != '#?RADIANCE': + error_message = ( + f'File with Radiance header must start with #?RADIANCE not ' + f'{first_line}.' + ) + raise ValueError(error_message) + + header_lines = [first_line] + nrows = ncols = ncomp = None + for line in inf: + line = line.rstrip().decode('utf-8') + header_lines.append(line) + if line[:6] == 'NROWS=': + nrows = int(line.split('=')[-1]) + if line[:6] == 'NCOLS=': + ncols = int(line.split('=')[-1]) + if line[:6] == 'NCOMP=': + ncomp = int(line.split('=')[-1]) + if line[:7] == 'FORMAT=': + fmt = line.split('=')[-1] + break + + if not nrows or not ncols: + error_message = ( + f'NROWS or NCOLS was not found in the Radiance header. NROWS ' + f'is {nrows} and NCOLS is {ncols}. The header must have both ' + f'elements.' + ) + raise ValueError(error_message) + return nrows, ncols, ncomp, len(header_lines) + 1, fmt + finally: + inf.close()
+ + + +
+[docs] +def check_array_dim(array: np.ndarray, dim: int): + """Check NumPy array dimension. + + Args: + array: A NumPy array. + dim: The dimension to check against. + """ + assert array.ndim == dim, \ + f'Expected {dim}-dimensional array. Dimension of array is {array.ndim}'
+ + + +
+[docs] +def filter_array(array: np.ndarray, mask: np.ndarray) -> np.ndarray: + """Filter a NumPy array by a masking array. The array will be passed as is + if the mask is None. + + Args: + array: A NumPy array to filter. + mask: A NumPy array of ones/zeros or True/False. + + Returns: + A filtered NumPy array. + """ + if mask is not None: + return array[mask.astype(bool)] + return array
+ + + +
+[docs] +def hoys_mask(sun_up_hours: list, hoys: list) -> np.ndarray: + """Create a NumPy masking array from a list of hoys. + + Args: + sun_up_hours: A list of sun up hours. + hoys: A list hoys to select. + + Returns: + A NumPy array of booleans. + """ + if len(hoys) != 0: + hoys_mask = np.where(np.isin(sun_up_hours, hoys), True, False) + return hoys_mask
+ + + +
+[docs] +def array_memory_size( + sensors: int, sun_up_hours: int, ncomp: int = None, + dtype: np.dtype = np.float32, gigabyte: bool = True) -> float: + """Calculate the memory size of an array before creating or loading an + array. + + Args: + sensors: Number of sensors in the array. + sun_up_hours: Number of sun up hours in the array. + ncomp: Optional number of components for each element in the array, + e.g., if the data is in RGB format then this value must be set + to 3. Defaults to None. + dtype: The data type of the array. Defaults to np.float32. + gigabyte: Boolean toggle to output the memory size in gigabytes. + Defaults to True. + + Returns: + float: The memory size of an array. + """ + # check if dtype is valid + dtypes = tuple(np.sctypes['float']) + if not isinstance(dtype, dtypes): + try: + dtype = dtype() + except TypeError as err: + error_message = ( + f'Unable to instantiate input dtype. Expected any of the ' + f'following: {dtypes}. Received: {type(dtype)}.' + ) + raise TypeError(error_message) from err + + # calculate memory size + size = sensors * sun_up_hours * dtype.itemsize + if ncomp: + size *= ncomp + if gigabyte: + size /= (1024 ** 3) + + return size
+ + + +
+[docs] +def recursive_dict_merge(dict_1: dict, dict_2: dict): + """Recursive merging of two dictionaries. + + Args: + dict_1: Original dictionary. + dict_2: Dictionary to merge with dict_1. + """ + for k in dict_2: + if (k in dict_1 and isinstance(dict_1[k], dict) and + isinstance(dict_2[k], dict)): + recursive_dict_merge(dict_1[k], dict_2[k]) + else: + dict_1[k] = dict_2[k]
+ + + +def _filter_grids_by_pattern(grids_info, filter_pattern): + """Filter grids_info by a pattern. + + Args: + grids_info: Grid information. + filter_pattern: Pattern to filter grids by. + + Returns: + A list of filtered grids. + """ + grids = _filter_by_pattern(grids_info, filter=filter_pattern) + + return grids + + +
+[docs] +def get_delimiter(delimiter_input): + if delimiter_input == 'tab' or delimiter_input == '\t': + return '\t' + elif delimiter_input == 'space' or delimiter_input == ' ': + return ' ' + elif delimiter_input == 'comma' or delimiter_input == ',': + return ',' + elif delimiter_input == 'semicolon' or delimiter_input == ';': + return ';' + else: + raise ValueError(f'Unsupported delimiter: {delimiter_input}')
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_radiance_postprocess/well/well.html b/docs/_modules/honeybee_radiance_postprocess/well/well.html new file mode 100644 index 00000000..8d2d6635 --- /dev/null +++ b/docs/_modules/honeybee_radiance_postprocess/well/well.html @@ -0,0 +1,1068 @@ + + + + + + + honeybee_radiance_postprocess.well.well — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_radiance_postprocess.well.well

+"""Functions for WELL post-processing."""
+from typing import Tuple, Union
+from pathlib import Path
+from collections import defaultdict
+import json
+import itertools
+import numpy as np
+
+from ladybug.analysisperiod import AnalysisPeriod
+from ladybug.datatype.generic import GenericType
+from ladybug.color import Colorset
+from ladybug.datacollection import HourlyContinuousCollection
+from ladybug.datatype.fraction import Fraction
+from ladybug.datatype.time import Time
+from ladybug.legend import LegendParameters
+from ladybug.header import Header
+from honeybee.model import Model
+from honeybee.units import conversion_factor_to_meters
+from honeybee_radiance.writer import _filter_by_pattern
+from honeybee_radiance.postprocess.annual import filter_schedule_by_hours
+
+from ..metrics import da_array2d
+from ..annual import schedule_to_hoys, occupancy_schedule_8_to_6
+from ..results.annual_daylight import AnnualDaylight
+from ..util import filter_array, recursive_dict_merge
+from ..dynamic import DynamicSchedule, ApertureGroupSchedule
+from ..ies.lm import dynamic_schedule_direct_illuminance
+
+
+def _create_grid_summary(
+    grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid, pass_sda,
+    total_floor, area_weighted=True):
+    """Create a WELL summary for a single grid.
+
+    Args:
+        grid_info: Grid information.
+        sda_grid: Spatial Daylight Autonomy.
+        pass_sda: The percentage of the sensor points or floor area that
+            passes sDA.
+        total_floor: The number of sensor points or floor area.
+        area_weighted: Boolean to determine if the results are area
+            weighted. Defaults to True.
+
+    Returns:
+        Tuple:
+        -   summary_grid: Summary of each grid individually.
+    """
+    grid_id = grid_info['full_id']
+    grid_name = grid_info['name']
+    grid_summary = {
+        grid_id: {}
+    }
+
+    if area_weighted:
+        _grid_summary = {
+            grid_id: {
+                'name': grid_name,
+                'full_id': grid_id,
+                'sda': round(sda_grid, 2),
+                'sda_blinds_up': round(sda_blinds_up_grid, 2),
+                'sda_blinds_down': round(sda_blinds_down_grid, 2),
+                'floor_area_passing_sda': round(pass_sda, 2),
+                'total_floor_area': round(total_floor, 2)
+            }
+        }
+    else:
+        _grid_summary = {
+            grid_id: {
+                'name': grid_name,
+                'full_id': grid_id,
+                'sda': round(sda_grid, 2),
+                'sda_blinds_up': round(sda_blinds_up_grid, 2),
+                'sda_blinds_down': round(sda_blinds_down_grid, 2),
+                'sensor_count_passing_sda': int(round(pass_sda, 2)),
+                'total_sensor_count': total_floor
+            }
+        }
+
+    recursive_dict_merge(grid_summary, _grid_summary)
+
+    return grid_summary
+
+
+def _well_summary(
+    pass_sda_grids: list, grids_info: list,
+    grid_areas: list, pass_sda_blinds_up_grids: list,
+    pass_sda_blinds_down_grids: list) -> Tuple[dict, dict]:
+    """Create combined summary and summary for each grid individually.
+
+    Args:
+        pass_sda_grids: A list where each sublist is a list of True/False that
+            tells if each sensor point passes sDA.
+        grids_info: A list of grid information.
+        grid_areas: A list where each sublist is the area of each sensor point.
+            The alternative is a list of None values for each grid information.
+
+    Returns:
+        Tuple:
+        -   summary: Summary of of all grids combined.
+        -   summary_grid: Summary of each grid individually.
+    """
+    summary = {}
+    summary_grid = {}
+
+    if all(grid_area is not None for grid_area in grid_areas):
+        # weighted by mesh face area
+        total_area = 0
+        total_area_pass_sda = 0
+        for (pass_sda, grid_area, grid_info, pass_sda_blinds_up,
+             pass_sda_blinds_down) in \
+            zip(pass_sda_grids, grid_areas, grids_info,
+                pass_sda_blinds_up_grids, pass_sda_blinds_down_grids):
+            total_grid_area = grid_area.sum()
+
+            area_pass_sda = grid_area[pass_sda].sum()
+            area_pass_sda_blind_up = grid_area[pass_sda_blinds_up].sum()
+            area_pass_sda_blinds_down = grid_area[pass_sda_blinds_down].sum()
+            sda_grid = area_pass_sda / total_grid_area * 100
+            sda_blinds_up_grid = area_pass_sda_blind_up / total_grid_area * 100
+            sda_blinds_down_grid = area_pass_sda_blinds_down / total_grid_area * 100
+
+            # grid summary
+            grid_summary = \
+                _create_grid_summary(
+                    grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid,
+                    area_pass_sda, total_grid_area, area_weighted=True
+                )
+
+            recursive_dict_merge(summary_grid, grid_summary)
+
+            total_area += total_grid_area
+            total_area_pass_sda += area_pass_sda
+
+        summary['sda'] = round(total_area_pass_sda / total_area * 100, 2)
+        summary['floor_area_passing_sda'] = total_area_pass_sda
+        summary['total_floor_area'] = total_area
+    else:
+        # assume all sensor points cover the same area
+        total_sensor_count = 0
+        total_sensor_count_pass_sda = 0
+        for (pass_sda, grid_info, pass_sda_blinds_up, pass_sda_blinds_down) in \
+            zip(pass_sda_grids, grids_info, pass_sda_blinds_up_grids,
+                pass_sda_blinds_down_grids):
+            grid_count = grid_info['count']
+
+            sensor_count_pass_sda = pass_sda.sum()
+            sensor_count_pass_sda_blinds_up = pass_sda_blinds_up.sum()
+            sensor_count_pass_sda_blinds_down = pass_sda_blinds_down.sum()
+            sda_grid = sensor_count_pass_sda / grid_count * 100
+            sda_blinds_up_grid = sensor_count_pass_sda_blinds_up / grid_count * 100
+            sda_blinds_down_grid = sensor_count_pass_sda_blinds_down / grid_count * 100
+
+            # grid summary
+            grid_summary = \
+                _create_grid_summary(
+                    grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid,
+                    sensor_count_pass_sda, grid_count, area_weighted=False
+                )
+
+            recursive_dict_merge(summary_grid, grid_summary)
+
+            total_sensor_count += grid_count
+            total_sensor_count_pass_sda += sensor_count_pass_sda
+
+        summary['sda'] = round(total_sensor_count_pass_sda / total_sensor_count * 100, 2)
+        summary['sensor_count_passing_sda'] = int(total_sensor_count_pass_sda)
+        summary['total_sensor_count'] = total_sensor_count
+
+    return summary, summary_grid
+
+
+
+[docs] +def well_annual_daylight( + results: Union[str, AnnualDaylight], grids_filter: str = '*', + shade_transmittance: Union[float, dict] = 0.05, + use_states: bool = False, states_schedule: dict = None, + threshold: float = 300, target_time: float = 50, sub_folder: str = None): + """Calculate credits for WELL L06. + + Args: + results: Path to results folder or a Results class object. + grids_filter: The name of a grid or a pattern to filter the grids. + Defaults to '*'. + shade_transmittance: A value to use as a multiplier in place of solar + shading. This input can be either a single value that will be used + for all aperture groups, or a dictionary where aperture groups are + keys, and the value for each key is the shade transmittance. Values + for shade transmittance must be 1 > value > 0. + Defaults to 0.05. + use_states: A boolean to note whether to use the simulated states. Set + to True to use the simulated states. The default is False which will + use the shade transmittance instead. + states_schedule: A custom dictionary of shading states. In case this is + left empty, the function will calculate a shading schedule by using + the shade_transmittance input. If a states schedule is provided it + will check that it is complying with the 2% rule. Defaults to None. + threshold: Threshold value for daylight autonomy. Default: 300. + target_time: A minimum threshold of occupied time (eg. 50% of the + time), above which a given sensor passes and contributes to the + spatial daylight autonomy. Defaults to 50. + sub_folder: Relative path for a subfolder to write the output. If None, + the files will not be written. Defaults to None. + + Returns: + Tuple: + - summary: Summary of all grids combined. + - summary_grid: Summary of each grid individually. + - da_grids: List of daylight autonomy values for each grid. Each item + in the list is a NumPy array of DA values. + - states_schedule: A dictionary of annual shading schedules for each + aperture group. + - grids_info: Grid information. + """ + schedule = occupancy_schedule_8_to_6(as_list=True) + + if not isinstance(results, AnnualDaylight): + results = AnnualDaylight(results, schedule=schedule) + else: + # set schedule to default leed schedule + results.schedule = schedule + + occ_mask = results.occ_mask + total_occ = results.total_occ + + grids_info = results._filter_grids(grids_filter=grids_filter) + + if not states_schedule: + states_schedule, fail_to_comply, shd_trans_dict = dynamic_schedule_direct_illuminance( + results, grids_filter=grids_filter, shade_transmittance=shade_transmittance, use_states=use_states) + else: + raise NotImplementedError( + 'Custom input for argument states_schedule is not yet implemented.' + ) + + # check to see if there is a HBJSON with sensor grid meshes for areas + grid_areas, units_conversion = [], 1 + for base_file in Path(results.folder).parent.iterdir(): + if base_file.suffix in ('.hbjson', '.hbpkl'): + hb_model = Model.from_file(base_file) + units_conversion = conversion_factor_to_meters(hb_model.units) + filt_grids = _filter_by_pattern( + hb_model.properties.radiance.sensor_grids, filter=grids_filter) + for s_grid in filt_grids: + if s_grid.mesh is not None: + grid_areas.append(s_grid.mesh.face_areas) + grid_areas = [np.array(grid) for grid in grid_areas] + if not grid_areas: + grid_areas = [None] * len(grids_info) + + # spatial daylight autonomy + da_grids = [] + pass_sda_grids = [] + pass_sda_blinds_up_grids = [] + pass_sda_blinds_down_grids = [] + for grid_info in grids_info: + light_paths = [lp[0] for lp in grid_info['light_path']] + base_zero_array = np.apply_along_axis(filter_array, 1, np.zeros( + (grid_info['count'], len(results.sun_up_hours))), occ_mask) + arrays = [base_zero_array.copy()] + arrays_blinds_up = [base_zero_array.copy()] + arrays_blinds_down = [base_zero_array.copy()] + # combine total array for all light paths + if use_states: + array = results._array_from_states(grid_info, states=states_schedule, zero_array=True) + array = np.apply_along_axis(filter_array, 1, array, occ_mask) + + for light_path in light_paths: + # do an extra pass to calculate with blinds always up or down + if light_path != '__static_apertures__': + array_blinds_up = results._get_array( + grid_info, light_path, state=0, res_type='total') + array_filter = np.apply_along_axis( + filter_array, 1, array_blinds_up, occ_mask) + arrays_blinds_up.append(array_filter) + array_blinds_down = results._get_array( + grid_info, light_path, state=1, res_type='total') + array_filter = np.apply_along_axis( + filter_array, 1, array_blinds_down, occ_mask) + arrays_blinds_down.append(array_filter) + else: + static_array = results._get_array( + grid_info, light_path, state=0, res_type='total') + array_filter = np.apply_along_axis( + filter_array, 1, static_array, occ_mask) + arrays_blinds_up.append(array_filter) + arrays_blinds_down.append(array_filter) + else: + for light_path in light_paths: + array = results._get_array( + grid_info, light_path, res_type='total') + array_filter = np.apply_along_axis( + filter_array, 1, array, occ_mask) + if light_path != '__static_apertures__': + sun_up_hours = np.array(results.sun_up_hours).astype(int) + shd_trans_array = states_schedule[light_path][sun_up_hours] + shd_trans_array = shd_trans_array[occ_mask.astype(bool)] + arrays.append(array_filter * shd_trans_array) + arrays_blinds_up.append(array_filter) + arrays_blinds_down.append( + array_filter * shd_trans_dict[light_path]) + else: + arrays.append(array_filter) + arrays_blinds_up.append(array_filter) + arrays_blinds_down.append(array_filter) + array = sum(arrays) + + array_blinds_up = sum(arrays_blinds_up) + array_blinds_down = sum(arrays_blinds_down) + # calculate da per grid + da_grid = da_array2d(array, total_occ=total_occ, threshold=threshold) + da_grids.append(da_grid) + da_blinds_up_grid = da_array2d( + array_blinds_up, total_occ=total_occ, threshold=threshold) + da_blinds_down_grid = da_array2d( + array_blinds_down, total_occ=total_occ, threshold=threshold) + # calculate sda per grid + pass_sda_grids.append(da_grid >= target_time) + pass_sda_blinds_up_grids.append(da_blinds_up_grid >= target_time) + pass_sda_blinds_down_grids.append(da_blinds_down_grid >= target_time) + + # create summaries for all grids and each grid individually + summary, summary_grid = _well_summary( + pass_sda_grids, grids_info, grid_areas, + pass_sda_blinds_up_grids, pass_sda_blinds_down_grids) + + # credits + if not fail_to_comply: + if summary['sda'] >= 75: + summary['credits'] = 2 + elif summary['sda'] >= 55: + summary['credits'] = 1 + else: + summary['credits'] = 0 + else: + summary['credits'] = 0 + fail_to_comply_rooms = ', '.join(list(fail_to_comply.keys())) + note = ( + '0 credits have been awarded. The following sensor grids have at ' + 'least one hour where 2% of the floor area receives direct ' + f'illuminance of 1000 lux or more: {fail_to_comply_rooms}.' + ) + summary['note'] = note + + # convert to datacollection + def to_datacollection(aperture_group: str, values: np.ndarray): + # convert values to 0 and 1 (0 = no shading, 1 = shading) + if use_states: + header = Header(data_type=GenericType(aperture_group, ''), unit='', + analysis_period=AnalysisPeriod()) + hourly_data = HourlyContinuousCollection(header=header, values=values) + else: + values[values == 1] = 0 + values[values == shd_trans_dict[aperture_group]] = 1 + header = Header(data_type=GenericType(aperture_group, ''), unit='', + analysis_period=AnalysisPeriod(), + metadata={'Shade Transmittance': shd_trans_dict[aperture_group]}) + hourly_data = HourlyContinuousCollection(header=header, values=values.tolist()) + return hourly_data.to_dict() + + if use_states: + states_schedule = {k:to_datacollection(k, v['schedule']) for k, v in states_schedule.to_dict().items()} + else: + states_schedule = {k:to_datacollection(k, v) for k, v in states_schedule.items()} + + if sub_folder: + folder = Path(sub_folder) + folder.mkdir(parents=True, exist_ok=True) + + summary_file = folder.joinpath('summary.json') + summary_file.write_text(json.dumps(summary, indent=2)) + summary_grid_file = folder.joinpath('summary_grid.json') + summary_grid_file.write_text(json.dumps(summary_grid, indent=2)) + states_schedule_file = folder.joinpath('states_schedule.json') + states_schedule_file.write_text(json.dumps(states_schedule)) + grids_info_file = folder.joinpath('grids_info.json') + grids_info_file.write_text(json.dumps(grids_info, indent=2)) + + for (da, grid_info) in \ + zip(da_grids, grids_info): + grid_id = grid_info['full_id'] + da_file = folder.joinpath('results', 'da', f'{grid_id}.da') + da_file.parent.mkdir(parents=True, exist_ok=True) + np.savetxt(da_file, da, fmt='%.2f') + + da_grids_info_file = folder.joinpath( + 'results', 'da', 'grids_info.json') + da_grids_info_file.write_text(json.dumps(grids_info, indent=2)) + + states_schedule_err_file = \ + folder.joinpath('states_schedule_err.json') + states_schedule_err_file.write_text(json.dumps(fail_to_comply)) + + return (summary, summary_grid, da_grids, states_schedule, + fail_to_comply, grids_info)
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/index.html b/docs/_modules/index.html new file mode 100644 index 00000000..a33e2e02 --- /dev/null +++ b/docs/_modules/index.html @@ -0,0 +1,692 @@ + + + + + + + Overview: module code — honeybee-radiance-postprocess documentation + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_sources/cli/abnt.rst.txt b/docs/_sources/cli/abnt.rst.txt new file mode 100644 index 00000000..b059b52e --- /dev/null +++ b/docs/_sources/cli/abnt.rst.txt @@ -0,0 +1,6 @@ +abnt +==== + +.. click:: honeybee_radiance_postprocess.cli.abnt:abnt + :prog: honeybee-radiance-postprocess abnt + :show-nested: diff --git a/docs/_sources/cli/datacollection.rst.txt b/docs/_sources/cli/datacollection.rst.txt new file mode 100644 index 00000000..96d806bb --- /dev/null +++ b/docs/_sources/cli/datacollection.rst.txt @@ -0,0 +1,6 @@ +datacollection +============== + +.. click:: honeybee_radiance_postprocess.cli.datacollection:datacollection + :prog: honeybee-radiance-postprocess data-collection + :show-nested: diff --git a/docs/_sources/cli/grid.rst.txt b/docs/_sources/cli/grid.rst.txt new file mode 100644 index 00000000..14041523 --- /dev/null +++ b/docs/_sources/cli/grid.rst.txt @@ -0,0 +1,6 @@ +grid +==== + +.. click:: honeybee_radiance_postprocess.cli.grid:grid + :prog: honeybee-radiance-postprocess grid + :show-nested: diff --git a/docs/_sources/cli/index.rst.txt b/docs/_sources/cli/index.rst.txt new file mode 100644 index 00000000..8947f9db --- /dev/null +++ b/docs/_sources/cli/index.rst.txt @@ -0,0 +1,22 @@ +CLI +=== + + +Commands +-------- +.. toctree:: + :maxdepth: 1 + + main + abnt + two_phase + postprocess + well + viewfactor + mtxop + datacollection + grid + translate + leed + merge + schedule diff --git a/docs/_sources/cli/leed.rst.txt b/docs/_sources/cli/leed.rst.txt new file mode 100644 index 00000000..f4c2e110 --- /dev/null +++ b/docs/_sources/cli/leed.rst.txt @@ -0,0 +1,6 @@ +leed +==== + +.. click:: honeybee_radiance_postprocess.cli.leed:leed + :prog: honeybee-radiance-postprocess leed + :show-nested: diff --git a/docs/_sources/cli/main.rst.txt b/docs/_sources/cli/main.rst.txt new file mode 100644 index 00000000..539de0d7 --- /dev/null +++ b/docs/_sources/cli/main.rst.txt @@ -0,0 +1,7 @@ +main +==== + +.. click:: honeybee_radiance_postprocess.cli.__init__:postprocess + :prog: honeybee-radiance-postprocess + :show-nested: + :commands: diff --git a/docs/_sources/cli/merge.rst.txt b/docs/_sources/cli/merge.rst.txt new file mode 100644 index 00000000..2d1e44bb --- /dev/null +++ b/docs/_sources/cli/merge.rst.txt @@ -0,0 +1,6 @@ +merge +===== + +.. click:: honeybee_radiance_postprocess.cli.merge:merge + :prog: honeybee-radiance-postprocess merge + :show-nested: diff --git a/docs/_sources/cli/mtxop.rst.txt b/docs/_sources/cli/mtxop.rst.txt new file mode 100644 index 00000000..a7e94b82 --- /dev/null +++ b/docs/_sources/cli/mtxop.rst.txt @@ -0,0 +1,6 @@ +mtxop +===== + +.. click:: honeybee_radiance_postprocess.cli.mtxop:mtxop + :prog: honeybee-radiance-postprocess mtxop + :show-nested: diff --git a/docs/_sources/cli/postprocess.rst.txt b/docs/_sources/cli/postprocess.rst.txt new file mode 100644 index 00000000..69cbfeb9 --- /dev/null +++ b/docs/_sources/cli/postprocess.rst.txt @@ -0,0 +1,6 @@ +postprocess +=========== + +.. click:: honeybee_radiance_postprocess.cli.postprocess:post_process + :prog: honeybee-radiance-postprocess post-process + :show-nested: diff --git a/docs/_sources/cli/schedule.rst.txt b/docs/_sources/cli/schedule.rst.txt new file mode 100644 index 00000000..51bcc163 --- /dev/null +++ b/docs/_sources/cli/schedule.rst.txt @@ -0,0 +1,6 @@ +schedule +======== + +.. click:: honeybee_radiance_postprocess.cli.schedule:schedule + :prog: honeybee-radiance-postprocess schedule + :show-nested: diff --git a/docs/_sources/cli/translate.rst.txt b/docs/_sources/cli/translate.rst.txt new file mode 100644 index 00000000..744adc85 --- /dev/null +++ b/docs/_sources/cli/translate.rst.txt @@ -0,0 +1,6 @@ +translate +========= + +.. click:: honeybee_radiance_postprocess.cli.translate:translate + :prog: honeybee-radiance-postprocess translate + :show-nested: diff --git a/docs/_sources/cli/two_phase.rst.txt b/docs/_sources/cli/two_phase.rst.txt new file mode 100644 index 00000000..8752f601 --- /dev/null +++ b/docs/_sources/cli/two_phase.rst.txt @@ -0,0 +1,6 @@ +two_phase +========= + +.. click:: honeybee_radiance_postprocess.cli.two_phase:two_phase + :prog: honeybee-radiance-postprocess two_phase + :show-nested: diff --git a/docs/_sources/cli/viewfactor.rst.txt b/docs/_sources/cli/viewfactor.rst.txt new file mode 100644 index 00000000..13077a88 --- /dev/null +++ b/docs/_sources/cli/viewfactor.rst.txt @@ -0,0 +1,6 @@ +viewfactor +========== + +.. click:: honeybee_radiance_postprocess.cli.viewfactor:view_factor + :prog: honeybee-radiance-postprocess view_factor + :show-nested: diff --git a/docs/_sources/cli/well.rst.txt b/docs/_sources/cli/well.rst.txt new file mode 100644 index 00000000..194b8474 --- /dev/null +++ b/docs/_sources/cli/well.rst.txt @@ -0,0 +1,6 @@ +well +==== + +.. click:: honeybee_radiance_postprocess.cli.well:well + :prog: honeybee-radiance-postprocess well + :show-nested: diff --git a/docs/_sources/honeybee_radiance_postprocess.annual.rst.txt b/docs/_sources/honeybee_radiance_postprocess.annual.rst.txt new file mode 100644 index 00000000..1470f683 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.annual.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.annual module +============================================= + +.. automodule:: honeybee_radiance_postprocess.annual + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.annualdaylight.rst.txt b/docs/_sources/honeybee_radiance_postprocess.annualdaylight.rst.txt new file mode 100644 index 00000000..f9465aa8 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.annualdaylight.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.annualdaylight module +===================================================== + +.. automodule:: honeybee_radiance_postprocess.annualdaylight + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.annualirradiance.rst.txt b/docs/_sources/honeybee_radiance_postprocess.annualirradiance.rst.txt new file mode 100644 index 00000000..b2867798 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.annualirradiance.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.annualirradiance module +======================================================= + +.. automodule:: honeybee_radiance_postprocess.annualirradiance + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.abnt.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.abnt.rst.txt new file mode 100644 index 00000000..6f0c8bb3 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.abnt.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.abnt module +=============================================== + +.. automodule:: honeybee_radiance_postprocess.cli.abnt + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.datacollection.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.datacollection.rst.txt new file mode 100644 index 00000000..5f1a6cc7 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.datacollection.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.datacollection module +========================================================= + +.. automodule:: honeybee_radiance_postprocess.cli.datacollection + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.grid.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.grid.rst.txt new file mode 100644 index 00000000..e9917eba --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.grid.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.grid module +=============================================== + +.. automodule:: honeybee_radiance_postprocess.cli.grid + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.leed.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.leed.rst.txt new file mode 100644 index 00000000..caff78ce --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.leed.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.leed module +=============================================== + +.. automodule:: honeybee_radiance_postprocess.cli.leed + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.merge.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.merge.rst.txt new file mode 100644 index 00000000..277e3cd8 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.merge.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.merge module +================================================ + +.. automodule:: honeybee_radiance_postprocess.cli.merge + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.mtxop.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.mtxop.rst.txt new file mode 100644 index 00000000..31dcf2c8 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.mtxop.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.mtxop module +================================================ + +.. automodule:: honeybee_radiance_postprocess.cli.mtxop + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.postprocess.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.postprocess.rst.txt new file mode 100644 index 00000000..8d3d9951 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.postprocess.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.postprocess module +====================================================== + +.. automodule:: honeybee_radiance_postprocess.cli.postprocess + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.rst.txt new file mode 100644 index 00000000..1587877e --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.rst.txt @@ -0,0 +1,30 @@ +honeybee\_radiance\_postprocess.cli package +=========================================== + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_radiance_postprocess.cli.abnt + honeybee_radiance_postprocess.cli.datacollection + honeybee_radiance_postprocess.cli.grid + honeybee_radiance_postprocess.cli.leed + honeybee_radiance_postprocess.cli.merge + honeybee_radiance_postprocess.cli.mtxop + honeybee_radiance_postprocess.cli.postprocess + honeybee_radiance_postprocess.cli.schedule + honeybee_radiance_postprocess.cli.translate + honeybee_radiance_postprocess.cli.two_phase + honeybee_radiance_postprocess.cli.util + honeybee_radiance_postprocess.cli.viewfactor + honeybee_radiance_postprocess.cli.well + +Module contents +--------------- + +.. automodule:: honeybee_radiance_postprocess.cli + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.schedule.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.schedule.rst.txt new file mode 100644 index 00000000..c36848bb --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.schedule.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.schedule module +=================================================== + +.. automodule:: honeybee_radiance_postprocess.cli.schedule + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.translate.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.translate.rst.txt new file mode 100644 index 00000000..88a9abbb --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.translate.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.translate module +==================================================== + +.. automodule:: honeybee_radiance_postprocess.cli.translate + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.two_phase.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.two_phase.rst.txt new file mode 100644 index 00000000..db290a1a --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.two_phase.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.two\_phase module +===================================================== + +.. automodule:: honeybee_radiance_postprocess.cli.two_phase + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.util.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.util.rst.txt new file mode 100644 index 00000000..b377af9b --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.util.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.util module +=============================================== + +.. automodule:: honeybee_radiance_postprocess.cli.util + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.viewfactor.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.viewfactor.rst.txt new file mode 100644 index 00000000..d18a70fc --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.viewfactor.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.viewfactor module +===================================================== + +.. automodule:: honeybee_radiance_postprocess.cli.viewfactor + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.cli.well.rst.txt b/docs/_sources/honeybee_radiance_postprocess.cli.well.rst.txt new file mode 100644 index 00000000..e00c095d --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.cli.well.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.cli.well module +=============================================== + +.. automodule:: honeybee_radiance_postprocess.cli.well + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.data_type.rst.txt b/docs/_sources/honeybee_radiance_postprocess.data_type.rst.txt new file mode 100644 index 00000000..74a158b3 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.data_type.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.data\_type module +================================================= + +.. automodule:: honeybee_radiance_postprocess.data_type + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.dynamic.rst.txt b/docs/_sources/honeybee_radiance_postprocess.dynamic.rst.txt new file mode 100644 index 00000000..fdd4345d --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.dynamic.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.dynamic module +============================================== + +.. automodule:: honeybee_radiance_postprocess.dynamic + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.electriclight.rst.txt b/docs/_sources/honeybee_radiance_postprocess.electriclight.rst.txt new file mode 100644 index 00000000..b29986b2 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.electriclight.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.electriclight module +==================================================== + +.. automodule:: honeybee_radiance_postprocess.electriclight + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.en17037.rst.txt b/docs/_sources/honeybee_radiance_postprocess.en17037.rst.txt new file mode 100644 index 00000000..cb046c11 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.en17037.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.en17037 module +============================================== + +.. automodule:: honeybee_radiance_postprocess.en17037 + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.helper.rst.txt b/docs/_sources/honeybee_radiance_postprocess.helper.rst.txt new file mode 100644 index 00000000..bff2aecc --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.helper.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.helper module +============================================= + +.. automodule:: honeybee_radiance_postprocess.helper + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.ies.lm.rst.txt b/docs/_sources/honeybee_radiance_postprocess.ies.lm.rst.txt new file mode 100644 index 00000000..941f92a3 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.ies.lm.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.ies.lm module +============================================= + +.. automodule:: honeybee_radiance_postprocess.ies.lm + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.ies.lm_schedule.rst.txt b/docs/_sources/honeybee_radiance_postprocess.ies.lm_schedule.rst.txt new file mode 100644 index 00000000..567a685a --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.ies.lm_schedule.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.ies.lm\_schedule module +======================================================= + +.. automodule:: honeybee_radiance_postprocess.ies.lm_schedule + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.ies.rst.txt b/docs/_sources/honeybee_radiance_postprocess.ies.rst.txt new file mode 100644 index 00000000..fac22806 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.ies.rst.txt @@ -0,0 +1,19 @@ +honeybee\_radiance\_postprocess.ies package +=========================================== + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_radiance_postprocess.ies.lm + honeybee_radiance_postprocess.ies.lm_schedule + +Module contents +--------------- + +.. automodule:: honeybee_radiance_postprocess.ies + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.leed.leed.rst.txt b/docs/_sources/honeybee_radiance_postprocess.leed.leed.rst.txt new file mode 100644 index 00000000..30ff59e0 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.leed.leed.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.leed.leed module +================================================ + +.. automodule:: honeybee_radiance_postprocess.leed.leed + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.leed.leed_schedule.rst.txt b/docs/_sources/honeybee_radiance_postprocess.leed.leed_schedule.rst.txt new file mode 100644 index 00000000..575ccadc --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.leed.leed_schedule.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.leed.leed\_schedule module +========================================================== + +.. automodule:: honeybee_radiance_postprocess.leed.leed_schedule + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.leed.rst.txt b/docs/_sources/honeybee_radiance_postprocess.leed.rst.txt new file mode 100644 index 00000000..20b03627 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.leed.rst.txt @@ -0,0 +1,19 @@ +honeybee\_radiance\_postprocess.leed package +============================================ + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_radiance_postprocess.leed.leed + honeybee_radiance_postprocess.leed.leed_schedule + +Module contents +--------------- + +.. automodule:: honeybee_radiance_postprocess.leed + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.metrics.rst.txt b/docs/_sources/honeybee_radiance_postprocess.metrics.rst.txt new file mode 100644 index 00000000..35d23c07 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.metrics.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.metrics module +============================================== + +.. automodule:: honeybee_radiance_postprocess.metrics + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.reader.rst.txt b/docs/_sources/honeybee_radiance_postprocess.reader.rst.txt new file mode 100644 index 00000000..51418cdd --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.reader.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.reader module +============================================= + +.. automodule:: honeybee_radiance_postprocess.reader + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.results.annual_daylight.rst.txt b/docs/_sources/honeybee_radiance_postprocess.results.annual_daylight.rst.txt new file mode 100644 index 00000000..afb1ef85 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.results.annual_daylight.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.results.annual\_daylight module +=============================================================== + +.. automodule:: honeybee_radiance_postprocess.results.annual_daylight + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.results.annual_irradiance.rst.txt b/docs/_sources/honeybee_radiance_postprocess.results.annual_irradiance.rst.txt new file mode 100644 index 00000000..cd611c9a --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.results.annual_irradiance.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.results.annual\_irradiance module +================================================================= + +.. automodule:: honeybee_radiance_postprocess.results.annual_irradiance + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.results.results.rst.txt b/docs/_sources/honeybee_radiance_postprocess.results.results.rst.txt new file mode 100644 index 00000000..ef6e19e2 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.results.results.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.results.results module +====================================================== + +.. automodule:: honeybee_radiance_postprocess.results.results + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.results.rst.txt b/docs/_sources/honeybee_radiance_postprocess.results.rst.txt new file mode 100644 index 00000000..591fd302 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.results.rst.txt @@ -0,0 +1,20 @@ +honeybee\_radiance\_postprocess.results package +=============================================== + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_radiance_postprocess.results.annual_daylight + honeybee_radiance_postprocess.results.annual_irradiance + honeybee_radiance_postprocess.results.results + +Module contents +--------------- + +.. automodule:: honeybee_radiance_postprocess.results + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.rst.txt b/docs/_sources/honeybee_radiance_postprocess.rst.txt new file mode 100644 index 00000000..0c61e757 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.rst.txt @@ -0,0 +1,42 @@ +honeybee\_radiance\_postprocess package +======================================= + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + honeybee_radiance_postprocess.cli + honeybee_radiance_postprocess.ies + honeybee_radiance_postprocess.leed + honeybee_radiance_postprocess.results + honeybee_radiance_postprocess.well + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_radiance_postprocess.annual + honeybee_radiance_postprocess.annualdaylight + honeybee_radiance_postprocess.annualirradiance + honeybee_radiance_postprocess.data_type + honeybee_radiance_postprocess.dynamic + honeybee_radiance_postprocess.electriclight + honeybee_radiance_postprocess.en17037 + honeybee_radiance_postprocess.helper + honeybee_radiance_postprocess.metrics + honeybee_radiance_postprocess.reader + honeybee_radiance_postprocess.type_hints + honeybee_radiance_postprocess.util + honeybee_radiance_postprocess.vis_metadata + +Module contents +--------------- + +.. automodule:: honeybee_radiance_postprocess + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.type_hints.rst.txt b/docs/_sources/honeybee_radiance_postprocess.type_hints.rst.txt new file mode 100644 index 00000000..2fa33c3f --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.type_hints.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.type\_hints module +================================================== + +.. automodule:: honeybee_radiance_postprocess.type_hints + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.util.rst.txt b/docs/_sources/honeybee_radiance_postprocess.util.rst.txt new file mode 100644 index 00000000..e825aa86 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.util.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.util module +=========================================== + +.. automodule:: honeybee_radiance_postprocess.util + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.vis_metadata.rst.txt b/docs/_sources/honeybee_radiance_postprocess.vis_metadata.rst.txt new file mode 100644 index 00000000..97e5d117 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.vis_metadata.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.vis\_metadata module +==================================================== + +.. automodule:: honeybee_radiance_postprocess.vis_metadata + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.well.rst.txt b/docs/_sources/honeybee_radiance_postprocess.well.rst.txt new file mode 100644 index 00000000..bd8ead5a --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.well.rst.txt @@ -0,0 +1,18 @@ +honeybee\_radiance\_postprocess.well package +============================================ + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_radiance_postprocess.well.well + +Module contents +--------------- + +.. automodule:: honeybee_radiance_postprocess.well + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_radiance_postprocess.well.well.rst.txt b/docs/_sources/honeybee_radiance_postprocess.well.well.rst.txt new file mode 100644 index 00000000..c9a14c82 --- /dev/null +++ b/docs/_sources/honeybee_radiance_postprocess.well.well.rst.txt @@ -0,0 +1,7 @@ +honeybee\_radiance\_postprocess.well.well module +================================================ + +.. automodule:: honeybee_radiance_postprocess.well.well + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt new file mode 100644 index 00000000..7f4ac0a0 --- /dev/null +++ b/docs/_sources/index.rst.txt @@ -0,0 +1,27 @@ +Welcome to honeybee-radiance-postprocess's documentation! +=================================== + +CLI Docs +======== + +For command line interface documentation and API documentation see the pages below. + +.. toctree:: + :maxdepth: 2 + + cli//index + + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + +.. include:: modules.rst + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_sources/modules.rst.txt b/docs/_sources/modules.rst.txt new file mode 100644 index 00000000..1e1cbf50 --- /dev/null +++ b/docs/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +honeybee_radiance_postprocess +============================= + +.. toctree:: + :maxdepth: 4 + + honeybee_radiance_postprocess diff --git a/docs/_static/basic.css b/docs/_static/basic.css new file mode 100644 index 00000000..f316efcb --- /dev/null +++ b/docs/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css new file mode 100644 index 00000000..09e88ce3 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css @@ -0,0 +1,1109 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 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 @twitter 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/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css new file mode 100644 index 00000000..f4ede63f --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 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 @twitter 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/docs/_static/bootstrap-2.3.2/css/bootstrap.css b/docs/_static/bootstrap-2.3.2/css/bootstrap.css new file mode 100644 index 00000000..b725064a --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap.css @@ -0,0 +1,6167 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 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 @twitter 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; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +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-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]: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; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.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: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.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.127659574468085%; + *margin-left: 2.074468085106383%; + -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.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.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; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.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; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -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; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.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 { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.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: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.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; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.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: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + 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-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + 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; +} + +.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; + 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; +} + +.popover-title:empty { + display: none; +} + +.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 { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + 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, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 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: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.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: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css b/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css new file mode 100644 index 00000000..b6428e69 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 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 @twitter 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}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}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-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]: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}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.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:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.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.127659574468085%;*margin-left:2.074468085106383%;-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.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.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}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.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;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-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}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.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{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.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:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.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}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.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:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;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-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;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}.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;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}.popover-title:empty{display:none}.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{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;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,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 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:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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);background-image:-moz-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);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);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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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);background-image:-moz-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);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);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)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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);background-image:-moz-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);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);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)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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);background-image:-moz-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);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);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)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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);background-image:-moz-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);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);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)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-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{display:block;line-height:1}.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:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png b/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae GIT binary patch literal 8777 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 B7G?kd literal 0 HcmV?d00001 diff --git a/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png b/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png new file mode 100644 index 0000000000000000000000000000000000000000..a9969993201f9cee63cf9f49217646347297b643 GIT binary patch literal 12799 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 literal 0 HcmV?d00001 diff --git a/docs/_static/bootstrap-2.3.2/js/bootstrap.js b/docs/_static/bootstrap-2.3.2/js/bootstrap.js new file mode 100644 index 00000000..638bb187 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/js/bootstrap.js @@ -0,0 +1,2287 @@ +/* =================================================== + * bootstrap-transition.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $(function () { + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-alert.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT NO CONFLICT + * ================= */ + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + /* ALERT DATA-API + * ============== */ + + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + +}(window.$jqTheme || window.jQuery); +/* ============================================================ + * bootstrap-button.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON NO CONFLICT + * ================== */ + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + /* BUTTON DATA-API + * =============== */ + + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-carousel.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + + , to: function (pos) { + var activeIndex = this.getActiveIndex() + , that = this + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('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() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================= + * bootstrap-collapse.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================ + * bootstrap-dropdown.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('