From dc59f118029cb3ad03a3124915889fae92f9f6f8 Mon Sep 17 00:00:00 2001 From: GPrathap Date: Wed, 16 Dec 2015 01:23:07 +0530 Subject: [PATCH 1/3] updated UI design --- .../pom.xml | 40 +- .../service/DroneRealTimeService.java | 77 +- .../droneanalyzer/service/DroneService.java | 367 +- .../exception/DroneAnalyzerException.java | 0 .../transport/DroneAnalyzerXMPPConnector.java | 96 +- .../service/transport/DroneXMPPConnector.java | 21 +- .../trasformer/MessageTransformer.java | 125 + .../util/DroneAnalyzerServiceUtils.java | 123 + .../service/util/scep/ContentType.java | 26 + .../service/util/scep/SCEPOperation.java} | 32 +- .../src/main/webapp/META-INF/resources.xml | 18 - .../webapp/META-INF/webapp-classloading.xml | 22 +- .../src/main/webapp/WEB-INF/cxf-servlet.xml | 20 +- .../src/main/webapp/WEB-INF/web.xml | 21 +- .../service/DroneServiceTest.java | 116 + .../DroneAnalyzerXMPPConnectorTest.java | 33 + .../src/test/resources/spring-cxf-client.xml | 19 + ...oneAnalyzerManagementServiceComponent.java | 77 - .../trasformer/MessageTransformer.java | 111 - .../util/DroneAnalyzerServiceUtils.java | 79 - .../pom.xml | 20 +- .../plugin/constants/DroneConstants.java | 22 +- .../plugin/constants/MessageConfig.java | 10 +- .../plugin/controller/DroneController.java | 32 + .../controller/impl/DroneControllerImpl.java | 73 + .../plugin/impl/DroneAnalyzerManager.java | 31 +- .../impl/DroneAnalyzerManagerService.java | 18 +- .../plugin/impl/dao/DroneAnalyzerDAO.java | 7 +- .../dao/impl/DroneAnalyzerDeviceDAOImpl.java | 48 +- .../plugin/impl/util/DroneAnalyzerUtils.java | 3 + ...oneAnalyzerManagementServiceComponent.java | 16 +- .../impl/DroneAnalyzerDeviceDAOImplTest.java | 25 + .../device-mgt-iot-droneanalyzer/pom.xml | 4 +- .../pom.xml | 8 +- .../resources/agent/deviceConfig.properties | 33 + .../main/resources/agent/sketch.properties | 1 + .../main/resources/configs/drone_analyzer.xml | 8 + .../src/main/resources/dbscripts/h2.sql | 8 +- .../src/main/resources/dbscripts/mysql.sql | 8 +- .../device-view.hbs | 170 + .../device-view.js | 25 + .../device-view.json | 3 + .../public/images/thumb.png | Bin 0 -> 76844 bytes .../public/js/device-detail.js | 197 + .../public/js/load-map.js | 55 + .../public/templates/applications-list.hbs | 12 + .../public/templates/operations-log.hbs | 24 + .../public/templates/policy-compliance.hbs | 79 + .../private/conf/device-type.json | 8 + .../public/css/charisma-app.css | 727 + .../background_drone.png | Bin 0 -> 26787 bytes .../direction_drone.png | Bin 0 -> 11617 bytes .../drone_position_controller/pitch_drone.png | Bin 0 -> 20046 bytes .../public/images/firealarm.png | Bin 0 -> 141980 bytes .../public/images/no_video_preview.gif | Bin 0 -> 2111 bytes .../public/images/schematicsGuide.png | Bin 0 -> 154917 bytes .../public/images/thumb.png | Bin 0 -> 76844 bytes .../3dobject_controller/3dObjectControler.js | 193 + .../js/3dobject_controller/Coordinates.js | 148 + .../OrbitAndPanControls.js | 531 + .../3dobject_controller/progressbarControl.js | 71 + .../js/3dobject_controller/three.min.js | 706 + .../js/bower_components/bootstrap/.bower.json | 47 + .../bower_components/bootstrap/Gruntfile.js | 480 + .../js/bower_components/bootstrap/LICENSE | 21 + .../js/bower_components/bootstrap/README.md | 127 + .../js/bower_components/bootstrap/bower.json | 38 + .../bootstrap/dist/css/bootstrap-theme.css | 442 + .../dist/css/bootstrap-theme.css.map | 1 + .../dist/css/bootstrap-theme.min.css | 5 + .../bootstrap/dist/css/bootstrap.css | 6203 ++++++ .../bootstrap/dist/css/bootstrap.css.map | 1 + .../bootstrap/dist/css/bootstrap.min.css | 5 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes .../bootstrap/dist/js/bootstrap.js | 2114 ++ .../bootstrap/dist/js/bootstrap.min.js | 6 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes .../grunt/bs-glyphicons-data-generator.js | 41 + .../bootstrap/grunt/bs-lessdoc-parser.js | 236 + .../bootstrap/grunt/bs-raw-files-generator.js | 46 + .../bootstrap/grunt/sauce_browsers.yml | 82 + .../js/bower_components/bootstrap/js/affix.js | 142 + .../js/bower_components/bootstrap/js/alert.js | 92 + .../bower_components/bootstrap/js/button.js | 110 + .../bower_components/bootstrap/js/carousel.js | 223 + .../bower_components/bootstrap/js/collapse.js | 170 + .../bower_components/bootstrap/js/dropdown.js | 151 + .../js/bower_components/bootstrap/js/modal.js | 280 + .../bower_components/bootstrap/js/popover.js | 113 + .../bootstrap/js/scrollspy.js | 170 + .../js/bower_components/bootstrap/js/tab.js | 128 + .../bower_components/bootstrap/js/tooltip.js | 457 + .../bootstrap/js/transition.js | 59 + .../bootstrap/less/alerts.less | 68 + .../bootstrap/less/badges.less | 55 + .../bootstrap/less/bootstrap.less | 50 + .../bootstrap/less/breadcrumbs.less | 26 + .../bootstrap/less/button-groups.less | 240 + .../bootstrap/less/buttons.less | 157 + .../bootstrap/less/carousel.less | 243 + .../bootstrap/less/close.less | 33 + .../bower_components/bootstrap/less/code.less | 68 + .../bootstrap/less/component-animations.less | 31 + .../bootstrap/less/dropdowns.less | 215 + .../bootstrap/less/forms.less | 540 + .../bootstrap/less/glyphicons.less | 233 + .../bower_components/bootstrap/less/grid.less | 84 + .../bootstrap/less/input-groups.less | 166 + .../bootstrap/less/jumbotron.less | 48 + .../bootstrap/less/labels.less | 64 + .../bootstrap/less/list-group.less | 131 + .../bootstrap/less/media.less | 56 + .../bootstrap/less/mixins.less | 39 + .../bootstrap/less/mixins/alerts.less | 14 + .../less/mixins/background-variant.less | 8 + .../bootstrap/less/mixins/border-radius.less | 18 + .../bootstrap/less/mixins/buttons.less | 50 + .../bootstrap/less/mixins/center-block.less | 7 + .../bootstrap/less/mixins/clearfix.less | 22 + .../bootstrap/less/mixins/forms.less | 81 + .../bootstrap/less/mixins/gradients.less | 59 + .../bootstrap/less/mixins/grid-framework.less | 91 + .../bootstrap/less/mixins/grid.less | 122 + .../bootstrap/less/mixins/hide-text.less | 21 + .../bootstrap/less/mixins/image.less | 34 + .../bootstrap/less/mixins/labels.less | 12 + .../bootstrap/less/mixins/list-group.less | 29 + .../bootstrap/less/mixins/nav-divider.less | 10 + .../less/mixins/nav-vertical-align.less | 9 + .../bootstrap/less/mixins/opacity.less | 8 + .../bootstrap/less/mixins/pagination.less | 23 + .../bootstrap/less/mixins/panels.less | 24 + .../bootstrap/less/mixins/progress-bar.less | 10 + .../bootstrap/less/mixins/reset-filter.less | 8 + .../bootstrap/less/mixins/resize.less | 6 + .../less/mixins/responsive-visibility.less | 15 + .../bootstrap/less/mixins/size.less | 10 + .../bootstrap/less/mixins/tab-focus.less | 9 + .../bootstrap/less/mixins/table-row.less | 28 + .../bootstrap/less/mixins/text-emphasis.less | 8 + .../bootstrap/less/mixins/text-overflow.less | 8 + .../less/mixins/vendor-prefixes.less | 224 + .../bootstrap/less/modals.less | 150 + .../bootstrap/less/navbar.less | 655 + .../bower_components/bootstrap/less/navs.less | 242 + .../bootstrap/less/normalize.less | 425 + .../bootstrap/less/pager.less | 55 + .../bootstrap/less/pagination.less | 88 + .../bootstrap/less/panels.less | 243 + .../bootstrap/less/popovers.less | 133 + .../bootstrap/less/print.less | 101 + .../bootstrap/less/progress-bars.less | 105 + .../bootstrap/less/responsive-embed.less | 34 + .../bootstrap/less/responsive-utilities.less | 194 + .../bootstrap/less/scaffolding.less | 150 + .../bootstrap/less/tables.less | 233 + .../bootstrap/less/theme.less | 258 + .../bootstrap/less/thumbnails.less | 36 + .../bootstrap/less/tooltip.less | 95 + .../bower_components/bootstrap/less/type.less | 313 + .../bootstrap/less/utilities.less | 57 + .../bootstrap/less/variables.less | 846 + .../bootstrap/less/wells.less | 29 + .../bower_components/bootstrap/package.json | 81 + .../js/bower_components/jquery/.bower.json | 22 + .../js/bower_components/jquery/README.md | 11 + .../js/bower_components/jquery/bower.json | 11 + .../js/bower_components/jquery/component.json | 15 + .../js/bower_components/jquery/composer.json | 35 + .../bower_components/jquery/jquery-migrate.js | 511 + .../jquery/jquery-migrate.min.js | 3 + .../js/bower_components/jquery/jquery.js | 8829 ++++++++ .../js/bower_components/jquery/jquery.min.js | 6 + .../js/bower_components/jquery/jquery.min.map | 1 + .../js/bower_components/jquery/package.json | 7 + .../public/js/common/ajax_handler.js | 36 + .../public/js/common/general_handler | 82 + .../public/js/common/websocket_api | 61 + .../public/js/common/xmpp_client | 54 + .../public/js/config/config.js | 27 + .../public/js/d3.min.js | 5 + .../public/js/download.js | 174 + .../public/js/jQueryRotate.js | 339 + .../public/js/jquery-ui.js | 16617 ++++++++++++++++ .../public/js/jquery.validate.js | 1220 ++ .../public/js/jquery.xmpp.js | 1020 + .../public/js/modules/controller.js | 13 + .../public/js/modules/flight_dynamics.js | 67 + .../public/js/modules/realtime_plotting | 121 + .../public/js/modules/xmppconnector | 99 + .../type-view.hbs | 506 + .../type-view.json | 3 + .../drone_analyzer-overview.hbs} | 4 +- .../drone_analyzer-overview.js} | 2 +- .../drone_analyzer-overview.json} | 0 .../src/main/resources/p2.inf | 10 + pom.xml | 4 +- 203 files changed, 54236 insertions(+), 912 deletions(-) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/pom.xml (89%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneRealTimeService.java (52%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneService.java (58%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/exception/DroneAnalyzerException.java (100%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnector.java (58%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneXMPPConnector.java (90%) create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/trasformer/MessageTransformer.java create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/DroneAnalyzerServiceUtils.java create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/scep/ContentType.java rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImplTest.java => org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/scep/SCEPOperation.java} (54%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/webapp/META-INF/resources.xml (82%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/webapp/META-INF/webapp-classloading.xml (55%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/webapp/WEB-INF/cxf-servlet.xml (76%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer.api}/src/main/webapp/WEB-INF/web.xml (77%) create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneServiceTest.java create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnectorTest.java create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/resources/spring-cxf-client.xml delete mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/DroneAnalyzerManagementServiceComponent.java delete mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/trasformer/MessageTransformer.java delete mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/DroneAnalyzerServiceUtils.java rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/pom.xml (84%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/DroneConstants.java (57%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/MessageConfig.java (74%) create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/controller/DroneController.java create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/controller/impl/DroneControllerImpl.java rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManager.java (89%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManagerService.java (80%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/DroneAnalyzerDAO.java (97%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImpl.java (83%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/util/DroneAnalyzerUtils.java (94%) rename components/device-mgt-iot-droneanalyzer/{org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl => org.wso2.carbon.device.mgt.iot.droneanalyzer}/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/internal/DroneAnalyzerManagementServiceComponent.java (83%) create mode 100644 components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImplTest.java create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/agent/deviceConfig.properties create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/agent/sketch.properties create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.hbs create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/images/thumb.png create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/js/device-detail.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/js/load-map.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/applications-list.hbs create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/operations-log.hbs create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/policy-compliance.hbs create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/private/conf/device-type.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/css/charisma-app.css create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/drone_position_controller/background_drone.png create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/drone_position_controller/direction_drone.png create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/drone_position_controller/pitch_drone.png create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/firealarm.png create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/no_video_preview.gif create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/schematicsGuide.png create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/thumb.png create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/3dObjectControler.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/Coordinates.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/OrbitAndPanControls.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/progressbarControl.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/three.min.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/.bower.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/Gruntfile.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/LICENSE create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/README.md create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/bower.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.css create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.css.map create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.min.css create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.css create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.css.map create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.min.css create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/js/bootstrap.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/js/bootstrap.min.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/grunt/bs-lessdoc-parser.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/grunt/bs-raw-files-generator.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/grunt/sauce_browsers.yml create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/affix.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/alert.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/button.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/carousel.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/collapse.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/dropdown.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/modal.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/popover.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/scrollspy.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/tab.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/tooltip.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/js/transition.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/alerts.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/badges.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/bootstrap.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/breadcrumbs.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/button-groups.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/buttons.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/carousel.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/close.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/code.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/component-animations.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/dropdowns.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/forms.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/glyphicons.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/grid.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/input-groups.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/jumbotron.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/labels.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/list-group.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/media.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/alerts.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/background-variant.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/border-radius.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/buttons.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/center-block.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/clearfix.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/forms.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/gradients.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/grid-framework.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/grid.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/hide-text.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/image.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/labels.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/list-group.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/nav-divider.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/nav-vertical-align.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/opacity.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/pagination.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/panels.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/progress-bar.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/reset-filter.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/resize.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/responsive-visibility.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/size.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/tab-focus.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/table-row.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/text-emphasis.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/text-overflow.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/mixins/vendor-prefixes.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/modals.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/navbar.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/navs.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/normalize.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/pager.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/pagination.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/panels.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/popovers.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/print.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/progress-bars.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/responsive-embed.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/responsive-utilities.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/scaffolding.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/tables.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/theme.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/thumbnails.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/tooltip.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/type.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/utilities.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/variables.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/wells.less create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/package.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/.bower.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/README.md create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/bower.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/component.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/composer.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/jquery-migrate.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/jquery-migrate.min.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/jquery.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/jquery.min.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/jquery.min.map create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/package.json create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/common/ajax_handler.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/common/general_handler create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/common/websocket_api create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/common/xmpp_client create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/config/config.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/d3.min.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/download.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/jQueryRotate.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/jquery-ui.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/jquery.validate.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/jquery.xmpp.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/modules/controller.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/modules/flight_dynamics.js create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/modules/realtime_plotting create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/modules/xmppconnector create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/type-view.hbs create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/type-view.json rename features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/{iot.unit.device.droneanalyzer-overview/droneanalyzer-overview.hbs => iot.unit.device.drone_analyzer-overview/drone_analyzer-overview.hbs} (94%) rename features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/{iot.unit.device.droneanalyzer-overview/droneanalyzer-overview.js => iot.unit.device.drone_analyzer-overview/drone_analyzer-overview.js} (93%) rename features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/{iot.unit.device.droneanalyzer-overview/droneanalyzer-overview.json => iot.unit.device.drone_analyzer-overview/drone_analyzer-overview.json} (100%) create mode 100644 features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/p2.inf diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/pom.xml b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/pom.xml similarity index 89% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/pom.xml rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/pom.xml index 386d6eeeea..1bfc45ccfa 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/pom.xml +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/pom.xml @@ -1,21 +1,3 @@ - - @@ -25,7 +7,7 @@ ../pom.xml 4.0.0 - org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl + org.wso2.carbon.device.mgt.iot.droneanalyzer.api 1.9.2-SNAPSHOT war WSO2 Carbon - IoT Server Drone Analyzer API @@ -99,6 +81,12 @@ provided + + + org.springframework + spring-context + + org.apache.httpcomponents @@ -113,7 +101,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl + org.wso2.carbon.device.mgt.iot.droneanalyzer provided @@ -221,6 +209,12 @@ smackx provided + + org.apache.commons + commons-collections4 + 4.0 + + @@ -238,10 +232,10 @@ maven-war-plugin - + src/main/webapp/WEB-INF/web.xml drone_analyzer - + diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneRealTimeService.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneRealTimeService.java similarity index 52% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneRealTimeService.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneRealTimeService.java index 54c7cbdd98..e59863c29a 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneRealTimeService.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneRealTimeService.java @@ -1,64 +1,34 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ package org.wso2.carbon.device.mgt.iot.droneanalyzer.service; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneAnalyzerXMPPConnector; import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneXMPPConnector; import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.trasformer.MessageTransformer; -import javax.websocket.OnClose; -import javax.websocket.OnMessage; -import javax.websocket.OnOpen; -import javax.websocket.Session; +import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.io.IOException; +import java.nio.channels.ClosedChannelException; @ServerEndpoint("/datastream/drone_status") public class DroneRealTimeService { private static org.apache.commons.logging.Log log = LogFactory.getLog(DroneRealTimeService.class); - public MessageTransformer messageController; - public DroneXMPPConnector xmppConn; - Thread mqttStarterThread; + private MessageTransformer messageController; + private DroneAnalyzerXMPPConnector xmppConnector; public DroneRealTimeService(){ messageController = new MessageTransformer(); - xmppConn = new DroneXMPPConnector(messageController); - Runnable mqttStarter = new Runnable() { - @Override - public void run() { - try { - xmppConn.run(); - } catch (Exception e) { - log.error(e.getMessage()+ "\n", e); - } - } - }; - mqttStarterThread = new Thread(mqttStarter); - //mqttStarterThread.setDaemon(true); - mqttStarterThread.start(); + xmppConnector = new DroneAnalyzerXMPPConnector(messageController); + xmppConnector.connectLoginAndSetFilterOnReceiver(); } @OnOpen public void onOpen(Session session){ log.info(session.getId() + " has opened a connection"); + System.out.println(session.getId() + " has opened a connection"); try { session.getBasicRemote().sendText("Connection Established"); } catch (IOException e) { @@ -70,33 +40,50 @@ public class DroneRealTimeService { public void onMessage(String message, Session session){ try { while(true){ - if(!messageController.isEmptyQueue()){ + if((messageController !=null) && (!messageController.isEmptyQueue())){ String message1 = messageController.getMessage(); + System.out.println("Out going message :"+ message1); session.getBasicRemote().sendText(message1); } - /*if((current_message = messageController.getCurrentMessage())!= null){ - session.getBasicRemote().sendText( current_message ); - }*/ Thread.sleep(DroneConstants.MINIMUM_TIME_DURATION); } - } catch (IOException ex) { log.error(ex.getMessage() + "\n" + ex); } catch (InterruptedException e) { - e.printStackTrace(); + log.error(e.getMessage(), e); + System.out.println(e.getMessage()+" "+ e); } } @OnClose public void onClose(Session session){ + + try { + xmppConnector.disconnect(); + log.info("XMPP connection is disconnected"); + System.out.println("XMPP connection is disconnected"); + } + catch (Exception e) { + log.error(e.getMessage() + "\n" + e); + System.out.println(e.getMessage()+"\n"+ e); + } + log.info("Session " + session.getId() + " has ended"); + System.out.println("Session " + session.getId() + " has ended"); + } + + @OnError + public void onError(Session session, Throwable t) { try { session.getBasicRemote().sendText("Connection closed"); - xmppConn.disconnect(); + xmppConnector.disconnect(); log.info("XMPP connection is disconnected"); + System.out.println("00XMPP connection is disconnected"); } catch (Exception e) { log.error(e.getMessage()+"\n"+ e); + System.out.println("00"+ e.getMessage()+"\n"+ e); } log.info("Session " + session.getId() + " has ended"); + System.out.println("00 Session " + session.getId() + " has ended"); } } \ No newline at end of file diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneService.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneService.java similarity index 58% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneService.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneService.java index 5d0bbdea10..6691379dfd 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneService.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneService.java @@ -15,22 +15,30 @@ * specific language governing permissions and limitations * under the License. */ - package org.wso2.carbon.device.mgt.iot.droneanalyzer.service; import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.certificate.mgt.core.dto.SCEPResponse; +import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException; +import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementService; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.EnrolmentInfo; import org.wso2.carbon.device.mgt.iot.DeviceManagement; +import org.wso2.carbon.device.mgt.iot.DeviceValidator; import org.wso2.carbon.device.mgt.iot.apimgt.AccessTokenInfo; import org.wso2.carbon.device.mgt.iot.apimgt.TokenClient; import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppAccount; import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig; import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppServerClient; import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants; -import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneAnalyzerXMPPConnector; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.controller.DroneController; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.controller.impl.DroneControllerImpl; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.exception.DroneAnalyzerException; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util.DroneAnalyzerServiceUtils; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util.scep.ContentType; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util.scep.SCEPOperation; import org.wso2.carbon.device.mgt.iot.exception.AccessTokenException; import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException; import org.wso2.carbon.device.mgt.iot.util.ZipArchive; @@ -40,7 +48,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -49,16 +59,15 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +@Path("/DroneAnalyzerServiceUnitManager") public class DroneService { private static org.apache.commons.logging.Log log = LogFactory.getLog(DroneService.class); - - //TODO; replace this tenant domain private static final String SUPER_TENANT = "carbon.super"; @Context //injected response proxy supporting multiple thread private HttpServletResponse response; private ConcurrentHashMap deviceToIpMap = new ConcurrentHashMap<>(); - //private DroneAnalyzerXMPPConnector xmppConnector; + private DroneController droneController = new DroneControllerImpl(); /* --------------------------------------------------------------------------------------- Device management specific APIs @@ -68,9 +77,6 @@ public class DroneService { @PUT public boolean register(@QueryParam("deviceId") String deviceId, @QueryParam("name") String name, @QueryParam("owner") String owner) { - - - log.info( deviceId + name + owner); DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); @@ -80,7 +86,6 @@ public class DroneService { response.setStatus(Response.Status.CONFLICT.getStatusCode()); return false; } - Device device = new Device(); device.setDeviceIdentifier(deviceId); EnrolmentInfo enrolmentInfo = new EnrolmentInfo(); @@ -95,13 +100,11 @@ public class DroneService { enrolmentInfo.setOwner(owner); device.setEnrolmentInfo(enrolmentInfo); boolean added = deviceManagement.getDeviceManagementService().enrollDevice(device); - if (added) { response.setStatus(Response.Status.OK.getStatusCode()); } else { response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); } - return added; } catch (DeviceManagementException e) { response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); @@ -114,9 +117,6 @@ public class DroneService { @Path("manager/device/remove/{device_id}") @DELETE public void removeDevice(@PathParam("device_id") String deviceId, @Context HttpServletResponse response) { - - - log.info(deviceId ); DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); @@ -141,21 +141,15 @@ public class DroneService { @Path("manager/device/update/{device_id}") @POST - public boolean updateDevice(@PathParam("device_id") String deviceId, - @QueryParam("name") String name, + public boolean updateDevice(@PathParam("device_id") String deviceId, @QueryParam("name") String name, @Context HttpServletResponse response) { - - log.info(deviceId + name ); - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); deviceIdentifier.setType(DroneConstants.DEVICE_TYPE); try { Device device = deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier); device.setDeviceIdentifier(deviceId); - // device.setDeviceTypeId(deviceTypeId); device.getEnrolmentInfo().setDateOfLastUpdate(new Date().getTime()); device.setName(name); device.setType(DroneConstants.DEVICE_TYPE); @@ -179,14 +173,10 @@ public class DroneService { @Consumes("application/json") @Produces("application/json") public Device getDevice(@PathParam("device_id") String deviceId) { - - log.info(deviceId); - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); deviceIdentifier.setId(deviceId); deviceIdentifier.setType(DroneConstants.DEVICE_TYPE); - try { return deviceManagement.getDeviceManagementService().getDevice(deviceIdentifier); @@ -203,10 +193,6 @@ public class DroneService { @Consumes("application/json") @Produces("application/json") public Device[] getDroneDevices(@PathParam("username") String username) { - - /*@QueryParam("action") String action, @QueryParam("duration") String duration, - @QueryParam("speed") String speed*/ - DeviceManagement deviceManagement = new DeviceManagement(SUPER_TENANT); try { List userDevices = deviceManagement.getDeviceManagementService().getDevicesOfUser(username); @@ -225,16 +211,13 @@ public class DroneService { } finally { deviceManagement.endTenantFlow(); } - } @Path("manager/device/{sketch_type}/download") @GET @Produces("application/octet-stream") - public Response downloadSketch(@QueryParam("owner") String owner, - @QueryParam("deviceName") String customDeviceName, + public Response downloadSketch(@QueryParam("owner") String owner, @QueryParam("deviceName") String customDeviceName, @PathParam("sketch_type") String sketchType) { - log.info(owner + customDeviceName + sketchType); try { ZipArchive zipFile = createDownloadFile(owner, customDeviceName, sketchType); Response.ResponseBuilder rb = Response.ok(zipFile.getZipFile()); @@ -257,14 +240,12 @@ public class DroneService { public Response generateSketchLink(@QueryParam("owner") String owner, @QueryParam("deviceName") String customDeviceName, @PathParam("sketch_type") String sketchType) { - - log.info(owner + customDeviceName + sketchType); try { ZipArchive zipFile = createDownloadFile(owner, customDeviceName, sketchType); Response.ResponseBuilder rb = Response.ok(zipFile.getDeviceId()); return rb.build(); } catch (IllegalArgumentException ex) { - return Response.status(400).entity(ex.getMessage()).build();//bad request + return Response.status(400).entity(ex.getMessage()).build(); } catch (DeviceManagementException ex) { return Response.status(500).entity(ex.getMessage()).build(); } catch (AccessTokenException ex) { @@ -279,24 +260,19 @@ public class DroneService { if (owner == null) { throw new IllegalArgumentException("Error on createDownloadFile() Owner is null!"); } - //create new device id String deviceId = shortUUID(); - TokenClient accessTokenClient = new TokenClient(DroneConstants.DEVICE_TYPE); AccessTokenInfo accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId); - //create token String accessToken = accessTokenInfo.getAccess_token(); String refreshToken = accessTokenInfo.getRefresh_token(); //adding registering data - XmppAccount newXmppAccount = new XmppAccount(); newXmppAccount.setAccountName(owner + "_" + deviceId); newXmppAccount.setUsername(deviceId); newXmppAccount.setPassword(accessToken); newXmppAccount.setEmail(deviceId + "@wso2.com"); - XmppServerClient xmppServerClient = new XmppServerClient(); xmppServerClient.initControlQueue(); boolean status; @@ -313,23 +289,19 @@ public class DroneService { throw new DeviceManagementException(msg); } } - //Register the device with CDMF String deviceName = customDeviceName + "_" + deviceId; status = register(deviceId, deviceName, owner); - if (!status) { String msg = "Error occurred while registering the device with " + "id: " + deviceId + " owner:" + owner; throw new DeviceManagementException(msg); } - - ZipUtil ziputil = new ZipUtil(); ZipArchive zipFile = ziputil.downloadSketch(owner, SUPER_TENANT, sketchType, deviceId, deviceName, accessToken, refreshToken); zipFile.setDeviceId(deviceId); - return null; + return zipFile; } private static String shortUUID() { @@ -344,25 +316,18 @@ public class DroneService { --------------------------------------------------------------------------------------- */ @Path("controller/register/{owner}/{deviceId}/{ip}/{port}") @POST - public String registerDeviceIP(@PathParam("owner") String owner, - @PathParam("deviceId") String deviceId, + public String registerDeviceIP(@PathParam("owner") String owner, @PathParam("deviceId") String deviceId, @PathParam("ip") String deviceIP, @PathParam("port") String devicePort, @Context HttpServletResponse response, @Context HttpServletRequest request) { - - //TODO:: Need to get IP from the request itself String result; - log.info("Got register call from IP: " + deviceIP + " for Device ID: " + deviceId + " of owner: " + owner); - String deviceHttpEndpoint = deviceIP + ":" + devicePort; deviceToIpMap.put(deviceId, deviceHttpEndpoint); - result = "Device-IP Registered"; response.setStatus(Response.Status.OK.getStatusCode()); - if (log.isDebugEnabled()) { log.debug(result); } @@ -371,289 +336,47 @@ public class DroneService { } - /* Service to switch "ON" and "OFF" the Virtual FireAlarm bulb - Called by an external client intended to control the Virtual FireAlarm bulb */ @Path("controller/send_command") @POST - public void droneController(@HeaderParam("owner") String owner, @HeaderParam("deviceId") String deviceId, - @QueryParam("action") String action, - @QueryParam("duration") String duration, - @QueryParam("speed") String speed, - @Context HttpServletResponse response) { -/* - - + public Response droneController(@QueryParam("owner") String owner, @QueryParam("deviceId") String deviceId, + @QueryParam("action") String action, @QueryParam("duration") String duration, + @QueryParam("speed") String speed){ try { DeviceValidator deviceValidator = new DeviceValidator(); if (!deviceValidator.isExist(owner, SUPER_TENANT, new DeviceIdentifier(deviceId, - VirtualFireAlarmConstants - .DEVICE_TYPE))) { - response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); - return; + DroneConstants.DEVICE_TYPE))) { + return Response.status(Response.Status.UNAUTHORIZED.getStatusCode()).build(); } } catch (DeviceManagementException e) { log.error("DeviceValidation Failed for deviceId: " + deviceId + " of user: " + owner); - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - return; - } - - String switchToState = state.toUpperCase(); - - if (!switchToState.equals(VirtualFireAlarmConstants.STATE_ON) && !switchToState.equals( - VirtualFireAlarmConstants.STATE_OFF)) { - log.error("The requested state change shoud be either - 'ON' or 'OFF'"); - response.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); - return; - } - - String protocolString = protocol.toUpperCase(); - String callUrlPattern = VirtualFireAlarmConstants.BULB_CONTEXT + switchToState; - - if (log.isDebugEnabled()) { - log.debug("Sending request to switch-bulb of device [" + deviceId + "] via " + - protocolString); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build(); } - try { - switch (protocolString) { - case HTTP_PROTOCOL: - String deviceHTTPEndpoint = deviceToIpMap.get(deviceId); - if (deviceHTTPEndpoint == null) { - response.setStatus(Response.Status.PRECONDITION_FAILED.getStatusCode()); - return; - } - - VirtualFireAlarmServiceUtils.sendCommandViaHTTP(deviceHTTPEndpoint, callUrlPattern, true); - break; - case MQTT_PROTOCOL: - String mqttMessage = VirtualFireAlarmConstants.BULB_CONTEXT.replace("/", ""); - VirtualFireAlarmServiceUtils.sendCommandViaMQTT(owner, deviceId, mqttMessage, switchToState); - break; - case XMPP_PROTOCOL: - VirtualFireAlarmServiceUtils.sendCommandViaXMPP(owner, deviceId, - VirtualFireAlarmConstants.BULB_CONTEXT, - switchToState, virtualFireAlarmXMPPConnector); - break; - default: - response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); - return; - } - } catch (DeviceManagementException e) { - log.error("Failed to send switch-bulb request to device [" + deviceId + "] via " + protocolString); - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - return; - } - - response.setStatus(Response.Status.OK.getStatusCode());*/ - } - - - @Path("controller/readsonar") - @GET - public String requestSonarReading(@HeaderParam("owner") String owner, - @HeaderParam("deviceId") String deviceId, - @HeaderParam("protocol") String protocol, - @Context HttpServletResponse response) { - /*String replyMsg = ""; - - DeviceValidator deviceValidator = new DeviceValidator(); - try { - if (!deviceValidator.isExist(owner, SUPER_TENANT, new DeviceIdentifier(deviceId, - VirtualFireAlarmConstants - .DEVICE_TYPE))) { - response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); - return "Unauthorized Access"; - } - } catch (DeviceManagementException e) { - replyMsg = e.getErrorMessage(); - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - return replyMsg; - } - - String protocolString = protocol.toUpperCase(); + DroneAnalyzerServiceUtils.sendControlCommand(droneController, deviceId, action, Double.valueOf(speed), + Double.valueOf(duration)); + return Response.status(Response.Status.ACCEPTED).build(); - if (log.isDebugEnabled()) { - log.debug("Sending request to read sonar value of device [" + deviceId + "] via " + - protocolString); - } - - try { - switch (protocolString) { - case HTTP_PROTOCOL: - String deviceHTTPEndpoint = deviceToIpMap.get(deviceId); - if (deviceHTTPEndpoint == null) { - replyMsg = - "IP not registered for device: " + deviceId + " of owner: " + owner; - response.setStatus(Response.Status.PRECONDITION_FAILED.getStatusCode()); - return replyMsg; - } - - replyMsg = VirtualFireAlarmServiceUtils.sendCommandViaHTTP(deviceHTTPEndpoint, - VirtualFireAlarmConstants.SONAR_CONTEXT, - false); - break; - - case MQTT_PROTOCOL: - String mqttMessage = VirtualFireAlarmConstants.BULB_CONTEXT.replace("/", ""); - VirtualFireAlarmServiceUtils.sendCommandViaMQTT(owner, deviceId, mqttMessage, ""); - break; - - case XMPP_PROTOCOL: - VirtualFireAlarmServiceUtils.sendCommandViaXMPP(owner, deviceId, - VirtualFireAlarmConstants.SONAR_CONTEXT, "", - virtualFireAlarmXMPPConnector); - break; - - default: - replyMsg = "Requested protocol '" + protocolString + "' is not supported"; - response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); - return replyMsg; - } } catch (DeviceManagementException e) { - replyMsg = e.getErrorMessage(); - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - return replyMsg; + log.error("Drone command didn't success. Try again, \n"+ e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } - - response.setStatus(Response.Status.OK.getStatusCode()); - replyMsg = "The current sonar reading of the device is " + replyMsg; - return replyMsg;*/ - - return null; } - - @Path("controller/readtemperature") @GET - @Consumes("application/json") - @Produces("application/json") - public Response requestTemperature(@HeaderParam("owner") String owner, - @HeaderParam("deviceId") String deviceId, - @HeaderParam("protocol") String protocol, - @Context HttpServletResponse response) { - //SensorRecord sensorRecord = null; - - /*DeviceValidator deviceValidator = new DeviceValidator(); - try { - if (!deviceValidator.isExist(owner, SUPER_TENANT, new DeviceIdentifier(deviceId, - VirtualFireAlarmConstants - .DEVICE_TYPE))) { - response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); - } - } catch (DeviceManagementException e) { - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - } - - String protocolString = protocol.toUpperCase(); - - if (log.isDebugEnabled()) { - log.debug( - "Sending request to read virtual-firealarm-temperature of device [" + deviceId + - "] via " + protocolString); - } - - try { - switch (protocolString) { - case HTTP_PROTOCOL: - String deviceHTTPEndpoint = deviceToIpMap.get(deviceId); - if (deviceHTTPEndpoint == null) { - response.setStatus(Response.Status.PRECONDITION_FAILED.getStatusCode()); - } - - String temperatureValue = VirtualFireAlarmServiceUtils.sendCommandViaHTTP(deviceHTTPEndpoint, - VirtualFireAlarmConstants.TEMPERATURE_CONTEXT, - false); - - *//* SensorDataManager.getInstance().setSensorRecord(deviceId, - VirtualFireAlarmConstants.SENSOR_TEMPERATURE, - temperatureValue, - Calendar.getInstance().getTimeInMillis());*//* - break; - - case MQTT_PROTOCOL: - String mqttMessage = VirtualFireAlarmConstants.BULB_CONTEXT.replace("/", ""); - VirtualFireAlarmServiceUtils.sendCommandViaMQTT(owner, deviceId, mqttMessage, ""); - break; - - case XMPP_PROTOCOL: - VirtualFireAlarmServiceUtils.sendCommandViaXMPP(owner, deviceId, - VirtualFireAlarmConstants.TEMPERATURE_CONTEXT, "", - virtualFireAlarmXMPPConnector); - break; - - default: - response.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); - } -*//* - sensorRecord = SensorDataManager.getInstance().getSensorRecord(deviceId, - VirtualFireAlarmConstants - .SENSOR_TEMPERATURE); -*//* - } catch (DeviceManagementException e) { - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - } - - response.setStatus(Response.Status.OK.getStatusCode());*/ - return null; - } - - /*@Path("controller/push_temperature") - @POST - @Consumes(MediaType.APPLICATION_JSON) - public void pushTemperatureData(final DeviceJSON dataMsg, - @Context HttpServletResponse response) { - String deviceId = dataMsg.deviceId; - String deviceIp = dataMsg.reply; - float temperature = dataMsg.value; - - String registeredIp = deviceToIpMap.get(deviceId); - - if (registeredIp == null) { - log.warn("Unregistered IP: Temperature Data Received from an un-registered IP " + - deviceIp + " for device ID - " + deviceId); - response.setStatus(Response.Status.PRECONDITION_FAILED.getStatusCode()); - return; - } else if (!registeredIp.equals(deviceIp)) { - log.warn("Conflicting IP: Received IP is " + deviceIp + ". Device with ID " + - deviceId + - " is already registered under some other IP. Re-registration " + - "required"); - response.setStatus(Response.Status.CONFLICT.getStatusCode()); - return; - } - SensorDataManager.getInstance().setSensorRecord(deviceId, - VirtualFireAlarmConstants - .SENSOR_TEMPERATURE, - String.valueOf(temperature), - Calendar.getInstance().getTimeInMillis()); - - if (!VirtualFireAlarmServiceUtils.publishToDAS(dataMsg.owner, dataMsg.deviceId, dataMsg.value)) { - response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); - } - - }*/ - - - /*@GET @Path("controller/scep") public Response scepRequest(@QueryParam("operation") String operation, @QueryParam("message") String message) { - if (log.isDebugEnabled()) { log.debug("Invoking SCEP operation " + operation); } - if (SCEPOperation.GET_CA_CERT.getValue().equals(operation)) { - if (log.isDebugEnabled()) { log.debug("Invoking GetCACert"); } - try { CertificateManagementService certificateManagementService = - VirtualFireAlarmServiceUtils.getCertificateManagementService(); + DroneAnalyzerServiceUtils.getCertificateManagementService(); SCEPResponse scepResponse = certificateManagementService.getCACertSCEP(); Response.ResponseBuilder responseBuilder; - switch (scepResponse.getResultCriteria()) { case CA_CERT_FAILED: log.error("CA cert failed"); @@ -664,16 +387,13 @@ public class DroneService { if (log.isDebugEnabled()) { log.debug("CA certificate received in GetCACert"); } - responseBuilder = Response.ok(scepResponse.getEncodedResponse(), ContentType.X_X509_CA_CERT); break; case CA_RA_CERT_RECEIVED: - if (log.isDebugEnabled()) { log.debug("CA and RA certificates received in GetCACert"); } - responseBuilder = Response.ok(scepResponse.getEncodedResponse(), ContentType.X_X509_CA_RA_CERT); break; @@ -682,12 +402,11 @@ public class DroneService { responseBuilder = Response.serverError(); break; } - return responseBuilder.build(); - } catch (VirtualFireAlarmException e) { - log.error("Error occurred while enrolling the iOS device", e); + } catch (DroneAnalyzerException e) { + log.error("Error occurred while enrolling the drone device", e); } catch (KeystoreException e) { - log.error("Keystore error occurred while enrolling the iOS device", e); + log.error("Keystore error occurred while enrolling the drone device", e); } } else if (SCEPOperation.GET_CA_CAPS.getValue().equals(operation)) { @@ -697,13 +416,11 @@ public class DroneService { } try { - CertificateManagementService certificateManagementService = VirtualFireAlarmServiceUtils. + CertificateManagementService certificateManagementService = DroneAnalyzerServiceUtils. getCertificateManagementService(); byte caCaps[] = certificateManagementService.getCACapsSCEP(); - return Response.ok(caCaps, MediaType.TEXT_PLAIN).build(); - - } catch (VirtualFireAlarmException e) { + } catch (DroneAnalyzerException e) { log.error("Error occurred while enrolling the device", e); } @@ -712,9 +429,9 @@ public class DroneService { } return Response.serverError().build(); - }*/ + } - /*@POST + @POST @Path("controller/scep") public Response scepRequestPost(@QueryParam("operation") String operation, InputStream inputStream) { @@ -727,20 +444,18 @@ public class DroneService { if (log.isDebugEnabled()) { log.debug("Invoking PKIOperation"); } - try { - CertificateManagementService certificateManagementService = VirtualFireAlarmServiceUtils. + CertificateManagementService certificateManagementService = DroneAnalyzerServiceUtils. getCertificateManagementService(); byte pkiMessage[] = certificateManagementService.getPKIMessageSCEP(inputStream); - return Response.ok(pkiMessage, ContentType.X_PKI_MESSAGE).build(); - } catch (VirtualFireAlarmException e) { + } catch (DroneAnalyzerException e) { log.error("Error occurred while enrolling the device", e); } catch (KeystoreException e) { log.error("Keystore error occurred while enrolling the device", e); } } return Response.serverError().build(); - }*/ + } } diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/exception/DroneAnalyzerException.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/exception/DroneAnalyzerException.java similarity index 100% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/exception/DroneAnalyzerException.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/exception/DroneAnalyzerException.java diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnector.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnector.java similarity index 58% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnector.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnector.java index 97ca59e0f3..b5cc81e7ff 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnector.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnector.java @@ -1,47 +1,30 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.jivesoftware.smack.packet.Message; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig; import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConnector; import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants; -import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util.DroneAnalyzerServiceUtils; -import org.wso2.carbon.device.mgt.iot.sensormgt.SensorDataManager; - -import java.util.Calendar; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.trasformer.MessageTransformer; public class DroneAnalyzerXMPPConnector extends XmppConnector { private static Log log = LogFactory.getLog(DroneAnalyzerXMPPConnector.class); private static String xmppServerIP; - // private static int xmppServerPort; + private static int xmppServerPort; private static String xmppAdminUsername; private static String xmppAdminPassword; private static String xmppAdminAccountJID; + private MessageTransformer messageTransformer; - private DroneAnalyzerXMPPConnector() { + public DroneAnalyzerXMPPConnector(MessageTransformer messageTransformer) { super(XmppConfig.getInstance().getXmppServerIP(), XmppConfig.getInstance().getSERVER_CONNECTION_PORT()); + this.messageTransformer = messageTransformer; + } public void initConnector() { @@ -53,47 +36,64 @@ public class DroneAnalyzerXMPPConnector extends XmppConnector { public void connectAndLogin() { try { - super.connectAndLogin(xmppAdminUsername, xmppAdminPassword, null); - super.setMessageFilterOnReceiver(xmppAdminAccountJID); + super.connectAndLogin(xmppAdminUsername, xmppAdminPassword, null); + super.setMessageFilterOnReceiver(xmppAdminAccountJID); } catch (DeviceManagementException e) { log.error("Connect/Login attempt to XMPP Server at: " + xmppServerIP + " failed"); retryXMPPConnection(); } } + public void setMessageFilterOnReceiver(String receiver){ + super.setMessageFilterOnReceiver( receiver+ "@" + xmppServerIP); + } + + public void connectLoginAndSetFilterOnReceiver(){ + initConnector(); + connectAndLogin(); + setMessageFilterOnReceiver(DroneConstants.DEVICE_ID); + } + + public void disconnect(){ + super.closeConnection(); + } + + /*public void printRoster(XmppConnector xmppConnection) throws Exception { + if(xmppConnection != null){ + Roster roster = xmppConnection.getRoster(); + if(roster !=null && roster.getEntries() != null){ + Collection entries = roster.getEntries(); + for (RosterEntry entry : entries) { + System.out.println(String.format("Buddy:%1$s - Status:%2$s", + entry.getName(), entry.getStatus())); + } + } + + }else{ + System.out.println("There are no users"); + } + }*/ + @Override protected void processXMPPMessage(Message xmppMessage) { String from = xmppMessage.getFrom(); String subject = xmppMessage.getSubject(); - String message = xmppMessage.getBody(); - + String inbound_message = xmppMessage.getBody(); + //System.out.println("inbound message :"+inbound_message); int indexOfAt = from.indexOf("@"); int indexOfSlash = from.indexOf("/"); - String deviceId = from.substring(0, indexOfAt); - String owner = from.substring(indexOfSlash + 1, from.length()); + String resource = from.substring(indexOfSlash + 1, from.length()); - log.info("Received XMPP message for: {OWNER-" + owner + "} & {DEVICE.ID-" + deviceId + "}"); - if (subject.equals("PUBLISHER")) { - log.info("XMPP: Publisher Message [" + message + "] from [" + from + "]"); - float temperature = Float.parseFloat(message.split(":")[1]); - if(!DroneAnalyzerServiceUtils.publishToDAS(owner, deviceId, temperature)) { - log.error("XMPP Connector: Publishing data to DAS failed."); - } - - if(log.isDebugEnabled()) { - log.debug("XMPP Connector: Published data to DAS successfully."); - } - } else if(subject.equals("CONTROL-REPLY")) { - log.info("XMPP: Reply Message [" + message + "] from [" + from + "]"); - String temperature = message.split(":")[1]; - SensorDataManager.getInstance().setSensorRecord(deviceId, DroneConstants.SENSOR_TEMPERATURE, temperature, Calendar.getInstance().getTimeInMillis()); - } else { - log.info("SOME XMPP Message [" + message + "] from " + from + "]"); + if ((inbound_message != null)&&(resource.equals(DroneConstants.MESSAGE_RESOURCE)) ){ + messageTransformer.messageTranslater(inbound_message); + } + else { + log.error("Message is empty or it is not belongs to "+ DroneConstants.DEVICE_ID); + System.out.println("Message is empty or it is not belongs to "+ DroneConstants.DEVICE_ID); } - } private void retryXMPPConnection() { diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneXMPPConnector.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneXMPPConnector.java similarity index 90% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneXMPPConnector.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneXMPPConnector.java index 6544578214..af68d8f296 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneXMPPConnector.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneXMPPConnector.java @@ -1,21 +1,3 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport; import org.apache.commons.logging.Log; @@ -32,6 +14,9 @@ import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.trasformer.MessageTr import java.util.Collection; +/** + * Created by geesara on 12/7/15. + */ public class DroneXMPPConnector { private static Log log = LogFactory.getLog(DroneXMPPConnector.class); diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/trasformer/MessageTransformer.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/trasformer/MessageTransformer.java new file mode 100644 index 0000000000..fa3163eea5 --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/trasformer/MessageTransformer.java @@ -0,0 +1,125 @@ +package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.trasformer; + + +import org.apache.commons.collections4.queue.CircularFifoQueue; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codehaus.jackson.JsonNode; +import org.codehaus.jackson.JsonProcessingException; +import org.codehaus.jackson.map.ObjectMapper; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.MessageConfig; + +import java.io.IOException; + + +public class MessageTransformer { + + private Log log = LogFactory.getLog(MessageTransformer.class); + private CircularFifoQueue sharedQueue; + + private String outbound_message_format_for_simulator = "{\"quatanium_val\":[%f, %f, %f, %f]," + + "\"basicParam\":{\"velocity\":[%f, %f, %f], \"global_location\":[%f, %f, %f]},\"battery_level\":%f, \"device_type\":\"IRIS_DRONE\"}"; + private String outbound_message_format_for_iris_drone = "{\"quatanium_val\":[%f, %f, %f]," + + "\"basicParam\":{\"velocity\":[%f, %f, %f], \"global_location\":[%f, %f, %f]},\"battery_level\":%f," + + "\"device_type\":\"SIMULATOR\"}"; + + public MessageTransformer(){ + sharedQueue = new CircularFifoQueue(DroneConstants.MAXIMUM_BUFFERE_SIZE_OF_SHARED_QUEUE); + } + + private void messageTranslaterForSimulator(JsonNode inbound_message){ + JsonNode node = inbound_message; + String outbound_message; + + try { + JsonNode velocity = node.get(MessageConfig.OUT_BASIC_PARAM_VAL).get(MessageConfig.OUT_BASIC_PARAM_VELOCITY); + JsonNode global_location = node.get(MessageConfig.OUT_BASIC_PARAM_VAL).get( + MessageConfig.OUT_BASIC_PARAM_GLOBAL_LOCATION); + JsonNode quatanium_vals = node.get(MessageConfig.OUT_QUATANNIM_VAL); + JsonNode battery_level = node.get(MessageConfig.OUT_BATTERY_LEVEL); + outbound_message = String.format(outbound_message_format_for_simulator, sTd(quatanium_vals.get(0)), + sTd(quatanium_vals.get(1)), sTd(quatanium_vals.get(2)), sTd(quatanium_vals.get(0)), + sTd(velocity.get(0)), sTd(velocity.get(1)), sTd(velocity.get(2)), sTd(global_location.get(0)), + sTd(global_location.get(1)), sTd(global_location.get(2)), sTd(battery_level)); + sharedQueue.add(outbound_message); + } catch (Exception e) { + log.error(e.getMessage()+",\n"+ e); + } + } + + private void messageTranslaterForIRISDrone(JsonNode inbound_message){ + JsonNode node = inbound_message; + String outbound_message; + try { + + JsonNode velocity = node.get(MessageConfig.OUT_BASIC_PARAM_VAL).get(MessageConfig.OUT_BASIC_PARAM_VELOCITY); + System.out.println("-------1----------"); + JsonNode global_location = node.get(MessageConfig.OUT_BASIC_PARAM_VAL).get( + MessageConfig.OUT_BASIC_PARAM_GLOBAL_LOCATION); + System.out.println("-------2----------"); + JsonNode quatanium_vals = node.get(MessageConfig.OUT_QUATANNIM_VAL); + JsonNode battery_level = node.get(MessageConfig.OUT_BATTERY_LEVEL); + System.out.println("-------3----------"); + + outbound_message = String.format(outbound_message_format_for_iris_drone, sTd(quatanium_vals.get(0)), + sTd(quatanium_vals.get(1)), sTd(quatanium_vals.get(2)), sTd(velocity.get(0)), + sTd(velocity.get(1)), sTd(velocity.get(2)), sTd(global_location.get(0)), + sTd(global_location.get(1)), sTd(global_location.get(2)), sTd(battery_level)); + + System.out.println("-----------------IRIS_DRONE---------------------"+ outbound_message); + + sharedQueue.add(outbound_message); + + }catch (Exception e) { + log.error(e.getMessage()+",\n"+ e); + System.out.println( e.getMessage()); + } + } + + public void messageTranslater(String inbound_message){ + JsonNode actualMessage = null; + ObjectMapper objectMapper = new ObjectMapper(); + + try { + actualMessage = objectMapper.readValue(inbound_message, JsonNode.class); + JsonNode deviceType = actualMessage.get(MessageConfig.IN_DEVICE_TYPE); + switch (deviceType.getTextValue()) { + + case MessageConfig.IN_IRIS_DRONE: + System.out.println("incomming message :" + inbound_message); + messageTranslaterForIRISDrone(actualMessage); + break; + case MessageConfig.IN_SIMULATOR: + messageTranslaterForSimulator(actualMessage); + break; + } + } catch (JsonProcessingException e) { + log.error("Incoming message might be corrupted, "+ e); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + + private double sTd(JsonNode s) + { + return Double.parseDouble(s.toString()); + } + + public String getMessage() { + try{ + if(sharedQueue.isEmpty() || sharedQueue == null){ + return ""; + } + return sharedQueue.remove(); + }catch(Exception e) { + log.error("There is no more messages to send or internal server error has been occurred, \n"+ e ); + return ""; + } + } + + public boolean isEmptyQueue(){ + return sharedQueue != null? sharedQueue.isEmpty():false; + } + +} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/DroneAnalyzerServiceUtils.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/DroneAnalyzerServiceUtils.java new file mode 100644 index 0000000000..91c6dd210a --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/DroneAnalyzerServiceUtils.java @@ -0,0 +1,123 @@ +package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util; + +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementService; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.analytics.exception.DataPublisherConfigurationException; +import org.wso2.carbon.device.mgt.analytics.service.DeviceAnalyticsService; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.controller.DroneController; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.controller.impl.DroneControllerImpl; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.exception.DroneAnalyzerException; +import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneAnalyzerXMPPConnector; + +import java.io.File; + +/** + * Created by geesara on 12/9/15. + */ +public class DroneAnalyzerServiceUtils { + + private static final String SUPER_TENANT = "carbon.super"; + private static final String TEMPERATURE_STREAM_DEFINITION = "org.wso2.iot.devices.temperature"; + private static org.apache.commons.logging.Log log = LogFactory.getLog(DroneAnalyzerServiceUtils.class); + + public static void sendCommandViaXMPP(String deviceOwner, String deviceId, String resource, + String state, DroneAnalyzerXMPPConnector droneXMPPConnector) + throws DeviceManagementException { + + String xmppServerDomain = XmppConfig.getInstance().getXmppEndpoint(); + int indexOfChar = xmppServerDomain.lastIndexOf(File.separator); + if (indexOfChar != -1) { + xmppServerDomain = xmppServerDomain.substring((indexOfChar + 1), + xmppServerDomain.length()); + } + indexOfChar = xmppServerDomain.indexOf(":"); + if (indexOfChar != -1) { + xmppServerDomain = xmppServerDomain.substring(0, indexOfChar); + } + String clientToConnect = deviceId + "@" + xmppServerDomain + File.separator + deviceOwner; + String message = resource.replace("/", "") + ":" + state; + droneXMPPConnector.sendXMPPMessage(clientToConnect, message, "CONTROL-REQUEST"); + + } + + public static boolean sendControlCommand(DroneController controller, String deviceId, String action, double speed, double duration) + throws DeviceManagementException { + boolean control_state = false; + try{ + switch (action){ + case DroneConstants.TAKE_OFF: + control_state = controller.takeoff(); + break; + case DroneConstants.LAND: + control_state = controller.land(); + break; + case DroneConstants.BACK: + control_state = controller.back(speed, duration); + break; + case DroneConstants.CLOCK_WISE: + control_state = controller.clockwise(speed, duration); + break; + case DroneConstants.COUNTER_CLOCKWISE: + control_state = controller.conterClockwise(speed, duration); + break; + case DroneConstants.DOWN: + control_state = controller.down(speed, duration); + break; + case DroneConstants.FRONT: + control_state = controller.back(speed, duration); + break; + case DroneConstants.FORWARD: + control_state = controller.clockwise(speed, duration); + break; + case DroneConstants.UP: + control_state = controller.up(speed, duration); + break; + } + }catch(Exception e){ + log.error(e.getMessage()+ "\n"+ e); + } + return control_state; + } + + public static boolean publishToDAS(String owner, String deviceId, float temperature) { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + ctx.setTenantDomain(SUPER_TENANT, true); + DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService( + DeviceAnalyticsService.class, null); + Object metdaData[] = {owner, DroneConstants.DEVICE_TYPE, deviceId, + System.currentTimeMillis()}; + Object payloadData[] = {temperature}; + + try { + deviceAnalyticsService.publishEvent(TEMPERATURE_STREAM_DEFINITION, "1.0.0", metdaData, + new Object[0], payloadData); + } catch (DataPublisherConfigurationException e) { + return false; + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + return true; + } + + public static CertificateManagementService getCertificateManagementService() throws + DroneAnalyzerException { + + PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + CertificateManagementService certificateManagementService = (CertificateManagementService) + ctx.getOSGiService(CertificateManagementService.class, null); + + if (certificateManagementService == null) { + String msg = "EnrollmentService is not initialized"; + log.error(msg); + throw new DroneAnalyzerException(msg); + } + + return certificateManagementService; + } + +} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/scep/ContentType.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/scep/ContentType.java new file mode 100644 index 0000000000..00e19d4469 --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/scep/ContentType.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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. + */ + +package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util.scep; + +public class ContentType { + public static final String X_PKI_MESSAGE = "application/x-pki-message"; + public static final String X_X509_CA_CERT = "application/x-x509-ca-cert"; + public static final String X_X509_CA_RA_CERT = "application/x-x509-ca-ra-cert"; +} + diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImplTest.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/scep/SCEPOperation.java similarity index 54% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImplTest.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/scep/SCEPOperation.java index 2b7b8fdcab..a14ed10eb0 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImplTest.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/scep/SCEPOperation.java @@ -15,25 +15,25 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao.impl; -import org.junit.Before; -import org.junit.Test; -import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException; +package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util.scep; -public class DroneAnalyzerDeviceDAOImplTest { - DroneAnalyzerDeviceDAOImpl dao; - @Before - public void init(){ - dao = new DroneAnalyzerDeviceDAOImpl(); +public enum SCEPOperation { + GET_CA_CERT("GetCACert"), + GET_CA_CAPS("GetCACaps"), + PKI_OPERATION("PKIOperation"); + + private String value; + + private SCEPOperation(String value) { + this.setValue(value); + } + + public String getValue() { + return value; } - //@Test - public void testDBConnenction(){ - try { - dao.deleteIotDevice("device1"); - } catch (IotDeviceManagementDAOException e) { - e.printStackTrace(); - } + public void setValue(String value) { + this.value = value; } } diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/META-INF/resources.xml b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/META-INF/resources.xml similarity index 82% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/META-INF/resources.xml rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/META-INF/resources.xml index 84e3e53e82..00eeca1585 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/META-INF/resources.xml +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/META-INF/resources.xml @@ -78,28 +78,10 @@ http://localhost:9763/drone_analyzer/controller/register/{owner}/{deviceId}/{ip}/{port} /controller/register/{owner}/{deviceId}/{ip}/{port} - - Any - POST - http://localhost:9763/drone_analyzer/controller/controller/bulb/{state} - /controller/bulb/{state} - Any GET http://localhost:9763/drone_analyzer/controller/send_command /controller/send_command - - Any - GET - http://localhost:9763/drone_analyzer/controller/controller/readtemperature - /controller/readtemperature - - - Any - POST - http://localhost:9763/drone_analyzer/controller/controller/push_temperature - /controller/push_temperature - \ No newline at end of file diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/META-INF/webapp-classloading.xml b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/META-INF/webapp-classloading.xml similarity index 55% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/META-INF/webapp-classloading.xml rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/META-INF/webapp-classloading.xml index b762ece052..fa44619195 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/META-INF/webapp-classloading.xml +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/META-INF/webapp-classloading.xml @@ -1,21 +1,19 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> + @@ -38,11 +39,12 @@ - + + + + - - + @@ -50,10 +52,8 @@ - - diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/WEB-INF/web.xml b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/WEB-INF/web.xml similarity index 77% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/WEB-INF/web.xml rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/WEB-INF/web.xml index 9b5c5fd009..d296aac1dd 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/webapp/WEB-INF/web.xml +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/main/webapp/WEB-INF/web.xml @@ -1,21 +1,4 @@ - managed-api-enabled - false + true managed-api-owner @@ -83,6 +66,8 @@ true + + diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneServiceTest.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneServiceTest.java new file mode 100644 index 0000000000..f2a9443daa --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/DroneServiceTest.java @@ -0,0 +1,116 @@ +package org.wso2.carbon.device.mgt.iot.droneanalyzer.service; + +import org.apache.commons.logging.LogFactory; +import org.apache.cxf.jaxrs.client.WebClient; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import org.wso2.carbon.device.mgt.common.Device; + +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.Collection; +import java.util.Iterator; + +/** + * Created by geesara on 12/10/15. + */ +public class DroneServiceTest { + + private static org.apache.commons.logging.Log log = LogFactory.getLog(DroneServiceTest.class); + ApplicationContext context; + WebClient client; + + @Before + public void init(){ + context = new ClassPathXmlApplicationContext("spring-cxf-client.xml"); + client = context.getBean("droneClient", WebClient.class); + } + //@Test + public void registerDevice(){ + client.path("manager/device/register").accept(MediaType.APPLICATION_JSON_TYPE); + client.query("deviceId", "device7"); + client.query("name", "dronetypeOne"); + client.query("owner", "DroneOwner"); + Response res = client.put(null); + log.info("Response status :"+ res.getStatus()); + System.out.println("Response status :"+ res.getStatus()); + } + + //@Test + public void removeDevice(){ + client.path("manager/device/remove/").accept(MediaType.APPLICATION_JSON_TYPE); + client.path("device7"); + Response res = client.delete(); + log.info("Response status :"+ res.getStatus()); + } + + //@Test + public void updateDevice(){ + client.path("manager/device/update/").accept(MediaType.APPLICATION_JSON_TYPE); + client.path("device2"); + client.query("name", "ARDrone"); + Response res = client.post(null); + log.info("Response status :"+ res.getStatus()); + } + + //@Test + public void getDevice(){ + client.path("manager/device/").accept(MediaType.APPLICATION_JSON_TYPE); + client.path("device2"); + Device res = client.get(Device.class); + log.info("Device name :"+ res.getName()); + log.info("Device type :"+ res.getType()); + } + + //@Test + public void getDroneDevices(){ + client.path("manager/devices/").accept(MediaType.APPLICATION_JSON_TYPE); + client.path("DroneOwner"); + Collection res = client.getCollection(Device.class); + Iterator iterator = res.iterator(); + while (iterator.hasNext()) { + Device device = iterator.next(); + log.info("Device name :" + device.getName()); + log.info("Device type :"+ device.getType()); + iterator.remove(); + } + } + + //@Test + public void downloadSketch(){ + client.path("manager/devices/"); + client.path("type1"); + client.path("download").accept(MediaType.APPLICATION_OCTET_STREAM); + Response res = client.get(); + log.info(res.getStatus()); + } + + //@Test + public void droneController(){ + client.path("controller/send_command"); + client.query("owner", "DroneOwner"); + client.query("deviceId", "device2"); + client.query("action", "takeoff"); + client.query("speed", 5); + client.query("duration", 56); + client.accept(MediaType.APPLICATION_JSON); + Response res = client.post(null); + System.out.println(res.getStatus()); + } + + public void generateSketchLink(){ + client.path("manager/devices/"); + client.path("type1"); + client.path("download").accept(MediaType.APPLICATION_OCTET_STREAM); + Response res = client.get(); + log.info(res.getStatus()); + + } + + + +} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnectorTest.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnectorTest.java new file mode 100644 index 0000000000..e6ed623c57 --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/transport/DroneAnalyzerXMPPConnectorTest.java @@ -0,0 +1,33 @@ +package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.BeforeClass; + +import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig; +import org.wso2.carbon.utils.CarbonUtils; + +/** + * Created by geesara on 12/10/15. + */ +public class DroneAnalyzerXMPPConnectorTest { + private static Log log = LogFactory.getLog(DroneAnalyzerXMPPConnectorTest.class); + public DroneAnalyzerXMPPConnector droneAnalyzerXMPPConnector; + + @BeforeClass + public void setup(){ + //droneAnalyzerXMPPConnector = new DroneAnalyzerXMPPConnector(); + //droneAnalyzerXMPPConnector.initConnector(); + } + + //@Test + public void login(){ + // droneAnalyzerXMPPConnector.connectAndLogin(); + // log.info("ip address "+XmppConfig.getInstance().getXmppServerIP()); + //log.info("path "+ CarbonUtils.getCarbonConfigDirPath()); + // log.info("path "+ CarbonUtils.getCarbonHome()); + //System.out.println(System.getProperty("carbon.home")); + System.out.println(System.getenv("CARBON_HOME")); + + } +} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/resources/spring-cxf-client.xml b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/resources/spring-cxf-client.xml new file mode 100644 index 0000000000..6df806690c --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.api/src/test/resources/spring-cxf-client.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/DroneAnalyzerManagementServiceComponent.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/DroneAnalyzerManagementServiceComponent.java deleted file mode 100644 index 62c8bac17e..0000000000 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/DroneAnalyzerManagementServiceComponent.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; -import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.DroneAnalyzerManagerService; -import org.wso2.carbon.device.mgt.iot.service.DeviceTypeService; - -public class DroneAnalyzerManagementServiceComponent { - private ServiceRegistration firealarmServiceRegRef; - - private static final Log log = LogFactory.getLog(DroneAnalyzerManagementServiceComponent.class); - - protected void activate(ComponentContext ctx) { - if (log.isDebugEnabled()) { - log.debug("Activating Drone Device Management Service Component"); - } - try { - BundleContext bundleContext = ctx.getBundleContext(); - firealarmServiceRegRef = - bundleContext.registerService(DeviceManagementService.class.getName(), - new DroneAnalyzerManagerService(), null); - if (log.isDebugEnabled()) { - log.debug("Drone Device Management Service Component has been successfully activated"); - } - } catch (Throwable e) { - log.error("Error occurred while activating Drone Device Management Service Component", e); - } - } - - protected void deactivate(ComponentContext ctx) { - if (log.isDebugEnabled()) { - log.debug("De-activating Virtual Firealarm Device Management Service Component"); - } - try { - if (firealarmServiceRegRef != null) { - firealarmServiceRegRef.unregister(); - } - if (log.isDebugEnabled()) { - log.debug( - "Virtual Firealarm Device Management Service Component has been successfully de-activated"); - } - } catch (Throwable e) { - log.error("Error occurred while de-activating Virtual Firealarm Device Management bundle", e); - } - } - - protected void setDeviceTypeService(DeviceTypeService deviceTypeService) { - if (log.isDebugEnabled()) { - log.debug("Data source service set to mobile service component"); - } - } - - protected void unsetDeviceTypeService(DeviceTypeService deviceTypeService) { - //do nothing - } -} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/trasformer/MessageTransformer.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/trasformer/MessageTransformer.java deleted file mode 100644 index 303f5ac3cc..0000000000 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/trasformer/MessageTransformer.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.trasformer; - - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.node.ArrayNode; -import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.MessageConfig; - -import java.io.IOException; -import java.util.LinkedList; -import java.util.Queue; - -public class MessageTransformer { - - private Log log = LogFactory.getLog(MessageTransformer.class); - - private Queue sharedQueue; - private String current_message = ""; - ObjectMapper mapper; - boolean isOld = true; - private String inbound_message_format = "{\"quatanium_val\":[%d, %d, %d, %d],\"accelerometer\":[%d, %d, %d]," + - "\"gyroscope\":[%d, %d, %d],\"magnetometer\":[%d, %d, %d],\"basicParam\":[%d, %d, %d]}"; - private String outbound_message_format = "{\"quatanium_val\":[%f, %f, %f, %f],\"accelerometer\":[%f, %f, %f]," + - "\"gyroscope\":[%f, %f, %f],\"magnetometer\":[%f, %f, %f],\"basicParam\":[%f, %f, %f]}"; - - public MessageTransformer(){ - mapper = new ObjectMapper(); - sharedQueue = new LinkedList(); - } - - public void messageTranslater(String inbound_message){ - JsonNode actualObj = null; - String outbound_message; - try { - actualObj = mapper.readTree(inbound_message); - ArrayNode quatannim_vals = (ArrayNode) actualObj.path(MessageConfig.IN_QUATANNIM_VAL); - ArrayNode accelerometer_vals = (ArrayNode) actualObj.path(MessageConfig.IN_ACCELETOMETER_VAL); - ArrayNode gyroscope_vals = (ArrayNode) actualObj.path(MessageConfig.IN_GYROSCOPE_VAL); - ArrayNode magnetometer_vals = (ArrayNode) actualObj.path(MessageConfig.IN_GYROSCOPE_VAL); - ArrayNode basicParam_vals = (ArrayNode) actualObj.path(MessageConfig.IN_BASIC_PARAM_VAL); - outbound_message = String.format(outbound_message_format, sTd(quatannim_vals.get(0)), sTd(quatannim_vals.get(1)), - sTd(quatannim_vals.get(2)), sTd(quatannim_vals.get(3)), sTd(accelerometer_vals.get(0)), - sTd(accelerometer_vals.get(1)), sTd(accelerometer_vals.get(2)), sTd(gyroscope_vals.get(0)), - sTd(gyroscope_vals.get(1)), sTd(gyroscope_vals.get(2)), sTd(magnetometer_vals.get(0)), - sTd(magnetometer_vals.get(1)), sTd(magnetometer_vals.get(2)), sTd(basicParam_vals.get(0)), - sTd(basicParam_vals.get(1)), sTd(basicParam_vals.get(2))); - - synchronized(current_message){ - isOld = false; - current_message = outbound_message; - } - sharedQueue.add(outbound_message); - } catch (IOException e) { - log.error(e.getMessage()+",\n"+ e); - }catch (Exception e) { - log.error(e.getMessage()+",\n"+ e); - } - } - - private double sTd(JsonNode s) - { - return Double.parseDouble(s.toString()); - } - - public String getMessage() { - if(sharedQueue.isEmpty()){ - return null; - } - else{ - return sharedQueue.remove(); - } - } - - public String getCurrentMessage(){ - synchronized(current_message) { - current_message = isOld == false ? current_message : null; - isOld = true; - } - return current_message; - } - - public boolean isCurrentMessageEmpty() - { - return isOld; - } - - public boolean isEmptyQueue(){ - return sharedQueue.isEmpty(); - } - -} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/DroneAnalyzerServiceUtils.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/DroneAnalyzerServiceUtils.java deleted file mode 100644 index 67a4b0797a..0000000000 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/service/util/DroneAnalyzerServiceUtils.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.device.mgt.iot.droneanalyzer.service.util; - -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.analytics.exception.DataPublisherConfigurationException; -import org.wso2.carbon.device.mgt.analytics.service.DeviceAnalyticsService; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.iot.controlqueue.xmpp.XmppConfig; -import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConstants; -import org.wso2.carbon.device.mgt.iot.droneanalyzer.service.transport.DroneAnalyzerXMPPConnector; - -import java.io.File; - - -public class DroneAnalyzerServiceUtils { - - private static final String SUPER_TENANT = "carbon.super"; - private static final String TEMPERATURE_STREAM_DEFINITION = "org.wso2.iot.devices.temperature"; - - public static void sendCommandViaXMPP(String deviceOwner, String deviceId, String resource, - String state, DroneAnalyzerXMPPConnector droneXMPPConnector) - throws DeviceManagementException { - - String xmppServerDomain = XmppConfig.getInstance().getXmppEndpoint(); - int indexOfChar = xmppServerDomain.lastIndexOf(File.separator); - if (indexOfChar != -1) { - xmppServerDomain = xmppServerDomain.substring((indexOfChar + 1), - xmppServerDomain.length()); - } - - indexOfChar = xmppServerDomain.indexOf(":"); - if (indexOfChar != -1) { - xmppServerDomain = xmppServerDomain.substring(0, indexOfChar); - } - - String clientToConnect = deviceId + "@" + xmppServerDomain + File.separator + deviceOwner; - String message = resource.replace("/", "") + ":" + state; - - droneXMPPConnector.sendXMPPMessage(clientToConnect, message, "CONTROL-REQUEST"); - } - - public static boolean publishToDAS(String owner, String deviceId, float temperature) { - PrivilegedCarbonContext.startTenantFlow(); - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(SUPER_TENANT, true); - DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService( - DeviceAnalyticsService.class, null); - Object metdaData[] = {owner, DroneConstants.DEVICE_TYPE, deviceId, - System.currentTimeMillis()}; - Object payloadData[] = {temperature}; - - try { - deviceAnalyticsService.publishEvent(TEMPERATURE_STREAM_DEFINITION, "1.0.0", metdaData, - new Object[0], payloadData); - } catch (DataPublisherConfigurationException e) { - return false; - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - return true; - } -} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/pom.xml b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/pom.xml similarity index 84% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/pom.xml rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/pom.xml index a6e9d90a43..339fd0d3e9 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/pom.xml +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/pom.xml @@ -1,21 +1,3 @@ - - @@ -26,7 +8,7 @@ 4.0.0 - org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl + org.wso2.carbon.device.mgt.iot.droneanalyzer 1.9.2-SNAPSHOT bundle diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/DroneConstants.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/DroneConstants.java similarity index 57% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/DroneConstants.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/DroneConstants.java index 457db9ec14..b7b1963ef7 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/DroneConstants.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/DroneConstants.java @@ -15,20 +15,26 @@ * specific language governing permissions and limitations * under the License. */ + package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants; public class DroneConstants { public final static String DEVICE_PLUGIN_DEVICE_NAME = "DEVICE_NAME"; public final static String DEVICE_PLUGIN_DEVICE_ID = "DRONE_DEVICE_ID"; - public final static String STATE_ON = "ON"; - public final static String STATE_OFF = "OFF"; - public static final String DEVICE_TYPE = "drone"; - public static final String URL_PREFIX = "http://"; - public static final String BULB_CONTEXT = "/BULB/"; - public static final String SONAR_CONTEXT = "/HUMIDITY/"; - public static final String TEMPERATURE_CONTEXT = "/TEMPERATURE/"; + public final static String MESSAGE_RESOURCE = "drone_current_status"; + public static final String DEVICE_TYPE = "drone_analyzer"; public static final int MINIMUM_TIME_DURATION = 150; - public static final String SENSOR_TEMPERATURE = "temp"; + public static final int MAXIMUM_BUFFERE_SIZE_OF_SHARED_QUEUE = 100; + public static final String DEVICE_ID = "drone_type1"; + public final static String TAKE_OFF = "takeoff"; + public final static String LAND = "land"; + public final static String UP = "up"; + public final static String DOWN = "down"; + public final static String BACK = "back"; + public final static String FORWARD = "forward"; + public final static String FRONT = "front"; + public final static String CLOCK_WISE = "clockwise"; + public final static String COUNTER_CLOCKWISE = "counterClockwise"; } diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/MessageConfig.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/MessageConfig.java similarity index 74% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/MessageConfig.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/MessageConfig.java index ee7f7d033f..d6d64b3593 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/MessageConfig.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/constants/MessageConfig.java @@ -15,12 +15,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants; +package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants; public class MessageConfig { - public static final String IN_QUATANNIM_VAL = "quatanium_val"; + public static final String IN_QUATANNIM_VAL = "quatanium_val"; + public static final String IN_DEVICE_TYPE = "device_type"; + public static final String IN_IRIS_DRONE = "IRIS_DRONE"; + public static final String IN_SIMULATOR = "SIMULATOR"; public static final String OUT_QUATANNIM_VAL = "quatanium_val"; public static final String IN_ACCELETOMETER_VAL = "accelerometer"; public static final String OUT_ACCELETOMETER_VAL = "accelerometer"; @@ -30,5 +33,8 @@ public class MessageConfig { public static final String OUT_MAGNETOMETER_VAL = "magnetometer"; public static final String IN_BASIC_PARAM_VAL = "basicParam"; public static final String OUT_BASIC_PARAM_VAL = "basicParam"; + public static final String OUT_BASIC_PARAM_VELOCITY = "velocity"; + public static final String OUT_BASIC_PARAM_GLOBAL_LOCATION = "global_location"; + public static final String OUT_BATTERY_LEVEL = "battery_level"; } diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/controller/DroneController.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/controller/DroneController.java new file mode 100644 index 0000000000..0bf48f4ea5 --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/controller/DroneController.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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. + */ + +package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.controller; + +public interface DroneController { + boolean takeoff(); + boolean land(); + boolean up(double speed, double duration); + boolean down(double speed, double duration); + boolean left(double speed, double duration); + boolean right(double speed, double duration); + boolean front(double speed, double duration); + boolean back(double speed, double duration); + boolean clockwise(double speed, double duration); + boolean conterClockwise(double speed, double duration); +} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/controller/impl/DroneControllerImpl.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/controller/impl/DroneControllerImpl.java new file mode 100644 index 0000000000..b9fd5e0734 --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/controller/impl/DroneControllerImpl.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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. + */ +package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.controller.impl; + +import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.controller.DroneController; + +public class DroneControllerImpl implements DroneController{ + + @Override + public boolean takeoff() { + return false; + } + + @Override + public boolean land() { + return false; + } + + @Override + public boolean up(double speed, double duration) { + return false; + } + + @Override + public boolean down(double speed, double duration) { + return false; + } + + @Override + public boolean left(double speed, double duration) { + return false; + } + + @Override + public boolean right(double speed, double duration) { + return false; + } + + @Override + public boolean front(double speed, double duration) { + return false; + } + + @Override + public boolean back(double speed, double duration) { + return false; + } + + @Override + public boolean clockwise(double speed, double duration) { + return false; + } + + @Override + public boolean conterClockwise(double speed, double duration) { + return false; + } +} diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManager.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManager.java similarity index 89% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManager.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManager.java index da8805538f..06fa311555 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManager.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManager.java @@ -15,6 +15,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl; import org.apache.commons.logging.Log; @@ -32,6 +33,9 @@ import org.wso2.carbon.device.mgt.iot.util.iotdevice.util.IotDeviceManagementUti import java.util.ArrayList; import java.util.List; +/** + * This represents the Drone Analyzer service implementation of DeviceManagerService. + */ public class DroneAnalyzerManager implements DeviceManager { private static final IotDeviceManagementDAOFactory iotDeviceManagementDAOFactory = new DroneAnalyzerDAO(); @@ -61,7 +65,7 @@ public class DroneAnalyzerManager implements DeviceManager { IotDevice iotDevice = IotDeviceManagementUtil.convertToIotDevice(device); try { if (log.isDebugEnabled()) { - log.debug("Enrolling a new Virtual Firealarm device : " + device.getDeviceIdentifier()); + log.debug("Enrolling a new drone device : " + device.getDeviceIdentifier()); } DroneAnalyzerDAO.beginTransaction(); status = iotDeviceManagementDAOFactory.getIotDeviceDAO().addIotDevice( @@ -74,7 +78,7 @@ public class DroneAnalyzerManager implements DeviceManager { String msg = "Error occurred while roll back the device enrol transaction :" + device.toString(); log.warn(msg, iotDAOEx); } - String msg = "Error while enrolling the Virtual Firealarm device : " + device.getDeviceIdentifier(); + String msg = "Error while enrolling the drone device : " + device.getDeviceIdentifier(); log.error(msg, e); throw new DeviceManagementException(msg, e); } @@ -100,7 +104,7 @@ public class DroneAnalyzerManager implements DeviceManager { String msg = "Error occurred while roll back the update device transaction :" + device.toString(); log.warn(msg, iotDAOEx); } - String msg = "Error while updating the enrollment of the Virtual Firealarm device : " + + String msg = "Error while updating the enrollment of the drone device : " + device.getDeviceIdentifier(); log.error(msg, e); throw new DeviceManagementException(msg, e); @@ -113,7 +117,7 @@ public class DroneAnalyzerManager implements DeviceManager { boolean status; try { if (log.isDebugEnabled()) { - log.debug("Dis-enrolling Virtual Firealarm device : " + deviceId); + log.debug("Dis-enrolling drone device : " + deviceId); } DroneAnalyzerDAO.beginTransaction(); status = iotDeviceManagementDAOFactory.getIotDeviceDAO() @@ -126,7 +130,7 @@ public class DroneAnalyzerManager implements DeviceManager { String msg = "Error occurred while roll back the device dis enrol transaction :" + deviceId.toString(); log.warn(msg, iotDAOEx); } - String msg = "Error while removing the Virtual Firealarm device : " + deviceId.getId(); + String msg = "Error while removing the drone device : " + deviceId.getId(); log.error(msg, e); throw new DeviceManagementException(msg, e); } @@ -138,14 +142,14 @@ public class DroneAnalyzerManager implements DeviceManager { boolean isEnrolled = false; try { if (log.isDebugEnabled()) { - log.debug("Checking the enrollment of Virtual Firealarm device : " + deviceId.getId()); + log.debug("Checking the enrollment of Drone device : " + deviceId.getId()); } IotDevice iotDevice = iotDeviceManagementDAOFactory.getIotDeviceDAO().getIotDevice(deviceId.getId()); if (iotDevice != null) { isEnrolled = true; } } catch (IotDeviceManagementDAOException e) { - String msg = "Error while checking the enrollment status of Virtual Firealarm device : " + + String msg = "Error while checking the enrollment status of Drone device : " + deviceId.getId(); log.error(msg, e); throw new DeviceManagementException(msg, e); @@ -169,13 +173,13 @@ public class DroneAnalyzerManager implements DeviceManager { Device device; try { if (log.isDebugEnabled()) { - log.debug("Getting the details of Virtual Firealarm device : " + deviceId.getId()); + log.debug("Getting the details of Drone device : " + deviceId.getId()); } IotDevice iotDevice = iotDeviceManagementDAOFactory.getIotDeviceDAO(). getIotDevice(deviceId.getId()); device = IotDeviceManagementUtil.convertToDevice(iotDevice); } catch (IotDeviceManagementDAOException e) { - String msg = "Error while fetching the Virtual Firealarm device : " + deviceId.getId(); + String msg = "Error while fetching the Drone device : " + deviceId.getId(); log.error(msg, e); throw new DeviceManagementException(msg, e); } @@ -215,7 +219,7 @@ public class DroneAnalyzerManager implements DeviceManager { try { if (log.isDebugEnabled()) { log.debug( - "updating the details of Virtual Firealarm device : " + deviceIdentifier); + "updating the details of Drone device : " + deviceIdentifier); } DroneAnalyzerDAO.beginTransaction(); status = iotDeviceManagementDAOFactory.getIotDeviceDAO() @@ -229,7 +233,7 @@ public class DroneAnalyzerManager implements DeviceManager { log.warn(msg, iotDAOEx); } String msg = - "Error while updating the Virtual Firealarm device : " + deviceIdentifier; + "Error while updating the Drone device : " + deviceIdentifier; log.error(msg, e); throw new DeviceManagementException(msg, e); } @@ -241,7 +245,7 @@ public class DroneAnalyzerManager implements DeviceManager { List devices = null; try { if (log.isDebugEnabled()) { - log.debug("Fetching the details of all Virtual Firealarm devices"); + log.debug("Fetching the details of all Drone devices"); } List iotDevices = iotDeviceManagementDAOFactory.getIotDeviceDAO().getAllIotDevices(); @@ -252,14 +256,13 @@ public class DroneAnalyzerManager implements DeviceManager { } } } catch (IotDeviceManagementDAOException e) { - String msg = "Error while fetching all Virtual Firealarm devices."; + String msg = "Error while fetching all Drone devices."; log.error(msg, e); throw new DeviceManagementException(msg, e); } return devices; } - @Override public boolean requireDeviceAuthorization() { return true; diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManagerService.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManagerService.java similarity index 80% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManagerService.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManagerService.java index 4d702a217a..3f9c2bc3cf 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManagerService.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/DroneAnalyzerManagerService.java @@ -1,20 +1,3 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; @@ -29,6 +12,7 @@ import org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.constants.DroneConsta import java.util.List; + public class DroneAnalyzerManagerService implements DeviceManagementService { private DeviceManager deviceManager; @Override diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/DroneAnalyzerDAO.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/DroneAnalyzerDAO.java similarity index 97% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/DroneAnalyzerDAO.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/DroneAnalyzerDAO.java index 0a1f0f43b4..a1665f669b 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/DroneAnalyzerDAO.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/DroneAnalyzerDAO.java @@ -15,6 +15,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao; import org.apache.commons.logging.Log; @@ -30,6 +31,7 @@ import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; + public class DroneAnalyzerDAO extends IotDeviceManagementDAOFactory implements IotDeviceManagementDAOFactoryInterface { private static final Log log = LogFactory.getLog(DroneAnalyzerDAO.class); @@ -37,10 +39,10 @@ public class DroneAnalyzerDAO extends IotDeviceManagementDAOFactory implements I private static ThreadLocal currentConnection = new ThreadLocal(); public DroneAnalyzerDAO() { - initFireAlarmDAO(); + initDroneAnalyzerDAO(); } - public static void initFireAlarmDAO() { + public static void initDroneAnalyzerDAO() { dataSource = getDataSourceMap().get(DroneConstants.DEVICE_TYPE); } @@ -68,7 +70,6 @@ public class DroneAnalyzerDAO extends IotDeviceManagementDAOFactory implements I throw new IotDeviceManagementDAOException("Error occurred while retrieving data source connection", e); } } - //log.info("------>"); return currentConnection.get(); } diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImpl.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImpl.java similarity index 83% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImpl.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImpl.java index 756f438907..02fd54bff8 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImpl.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImpl.java @@ -15,6 +15,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao.impl; import org.apache.commons.logging.Log; @@ -34,7 +35,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - +/** + * Implements IotDeviceDAO for drone analyzer. + */ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { private static final Log log = LogFactory.getLog(DroneAnalyzerDeviceDAOImpl.class); @@ -47,9 +50,12 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { ResultSet resultSet = null; try { conn = DroneAnalyzerDAO.getConnection(); + if(conn == null){ + log.error("Database connection hasn't been created"); + } String selectDBQuery = - "SELECT VIRTUAL_FIREALARM_DEVICE_ID, DEVICE_NAME" + - " FROM VIRTUAL_FIREALARM_DEVICE WHERE VIRTUAL_FIREALARM_DEVICE_ID = ?"; + "SELECT DRONE_DEVICE_ID, DEVICE_NAME" + + " FROM DRONE_DEVICE WHERE DRONE_DEVICE_ID = ?"; stmt = conn.prepareStatement(selectDBQuery); stmt.setString(1, iotDeviceId); resultSet = stmt.executeQuery(); @@ -66,7 +72,7 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { } } } catch (SQLException e) { - String msg = "Error occurred while fetching Drone device : '" + iotDeviceId + "'"; + String msg = "Error occurred while fetching drone device : '" + iotDeviceId + "'"; log.error(msg, e); throw new IotDeviceManagementDAOException(msg, e); } finally { @@ -84,7 +90,7 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { try { conn = DroneAnalyzerDAO.getConnection(); String createDBQuery = - "INSERT INTO VIRTUAL_FIREALARM_DEVICE(VIRTUAL_FIREALARM_DEVICE_ID, DEVICE_NAME) VALUES (?, ?)"; + "INSERT INTO DRONE_DEVICE(DRONE_DEVICE_ID, DEVICE_NAME) VALUES (?, ?)"; stmt = conn.prepareStatement(createDBQuery); stmt.setString(1, iotDevice.getIotDeviceId()); @@ -98,13 +104,13 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { if (rows > 0) { status = true; if (log.isDebugEnabled()) { - log.debug("Virtual Firealarm device " + iotDevice.getIotDeviceId() + " data has been" + - " added to the Virtual Firealarm database."); + log.debug("drone device " + iotDevice.getIotDeviceId() + " data has been" + + " added to the drone database."); } } } catch (SQLException e) { - String msg = "Error occurred while adding the Virtual Firealarm device '" + - iotDevice.getIotDeviceId() + "' to the Virtual Firealarm db."; + String msg = "Error occurred while adding the drone device '" + + iotDevice.getIotDeviceId() + "' to the drone db."; log.error(msg, e); throw new IotDeviceManagementDAOException(msg, e); } finally { @@ -122,7 +128,7 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { try { conn = DroneAnalyzerDAO.getConnection(); String updateDBQuery = - "UPDATE VIRTUAL_FIREALARM_DEVICE SET DEVICE_NAME = ? WHERE VIRTUAL_FIREALARM_DEVICE_ID = ?"; + "UPDATE DRONE_DEVICE SET DEVICE_NAME = ? WHERE DRONE_DEVICE_ID = ?"; stmt = conn.prepareStatement(updateDBQuery); if (iotDevice.getDeviceProperties() == null) { iotDevice.setDeviceProperties(new HashMap()); @@ -157,8 +163,8 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { try { conn = DroneAnalyzerDAO.getConnection(); System.out.println("delete device "); - /* String deleteDBQuery = - "DELETE FROM VIRTUAL_FIREALARM_DEVICE WHERE VIRTUAL_FIREALARM_DEVICE_ID = ?"; + String deleteDBQuery = + "DELETE FROM DRONE_DEVICE WHERE DRONE_DEVICE_ID = ?"; stmt = conn.prepareStatement(deleteDBQuery); stmt.setString(1, iotDeviceId); int rows = stmt.executeUpdate(); @@ -166,14 +172,14 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { status = true; if (log.isDebugEnabled()) { log.debug("Drone device " + iotDeviceId + " data has deleted" + - " from the Virtual Drone database."); + " from the drone database."); } - }*/ - } /*catch (SQLException e) { - String msg = "Error occurred while deleting Virtual Firealarm device " + iotDeviceId; + } + } catch (SQLException e) { + String msg = "Error occurred while deleting drone device " + iotDeviceId; log.error(msg, e); throw new IotDeviceManagementDAOException(msg, e); - }*/ finally { + } finally { IotDeviceManagementDAOUtil.cleanupResources(stmt, null); } return status; @@ -193,8 +199,8 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { try { conn = DroneAnalyzerDAO.getConnection(); String selectDBQuery = - "SELECT VIRTUAL_FIREALARM_DEVICE_ID, DEVICE_NAME " + - "FROM VIRTUAL_FIREALARM_DEVICE"; + "SELECT DRONE_DEVICE_ID, DEVICE_NAME " + + "FROM DRONE_DEVICE"; stmt = conn.prepareStatement(selectDBQuery); resultSet = stmt.executeQuery(); while (resultSet.next()) { @@ -208,11 +214,11 @@ public class DroneAnalyzerDeviceDAOImpl implements IotDeviceDAO { iotDevices.add(iotDevice); } if (log.isDebugEnabled()) { - log.debug("All Virtual Firealarm device details have fetched from Firealarm database."); + log.debug("All drone device details have fetched from drone database."); } return iotDevices; } catch (SQLException e) { - String msg = "Error occurred while fetching all Virtual Firealarm device data'"; + String msg = "Error occurred while fetching all drone device data'"; log.error(msg, e); throw new IotDeviceManagementDAOException(msg, e); } finally { diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/util/DroneAnalyzerUtils.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/util/DroneAnalyzerUtils.java similarity index 94% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/util/DroneAnalyzerUtils.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/util/DroneAnalyzerUtils.java index a394351625..01816662d5 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/util/DroneAnalyzerUtils.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/util/DroneAnalyzerUtils.java @@ -22,6 +22,9 @@ import org.apache.commons.logging.LogFactory; import java.util.Map; +/** + * Contains utility methods used by Drone Analyzer plugin. + */ public class DroneAnalyzerUtils { private static Log log = LogFactory.getLog(DroneAnalyzerUtils.class); diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/internal/DroneAnalyzerManagementServiceComponent.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/internal/DroneAnalyzerManagementServiceComponent.java similarity index 83% rename from components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/internal/DroneAnalyzerManagementServiceComponent.java rename to components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/internal/DroneAnalyzerManagementServiceComponent.java index 87acba1b0a..473502f4cb 100644 --- a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/internal/DroneAnalyzerManagementServiceComponent.java +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/main/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/internal/DroneAnalyzerManagementServiceComponent.java @@ -30,8 +30,8 @@ import org.wso2.carbon.device.mgt.iot.service.DeviceTypeService; /** - * @scr.component name="org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.internal - * .VirtualFirealarmManagementServiceComponent" + * @scr.component name="org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.internal + * .DroneAnalyzerManagementServiceComponent" * immediate="true" * @scr.reference name="org.wso2.carbon.device.mgt.iot.service.DeviceTypeServiceImpl" * interface="org.wso2.carbon.device.mgt.iot.service.DeviceTypeService" @@ -48,7 +48,7 @@ public class DroneAnalyzerManagementServiceComponent { protected void activate(ComponentContext ctx) { if (log.isDebugEnabled()) { - log.debug("Activating Virtual Firealarm Device Management Service Component"); + log.debug("Activating Drone Analyzer Management Service Component"); } try { BundleContext bundleContext = ctx.getBundleContext(); @@ -58,12 +58,12 @@ public class DroneAnalyzerManagementServiceComponent { if (log.isDebugEnabled()) { log.debug( - "Virtual Firealarm Device Management Service Component has been " + + "Drone Analyzer Device Management Service Component has been " + "successfully activated"); } } catch (Throwable e) { log.error( - "Error occurred while activating Virtual Firealarm Device Management Service " + + "Error occurred while activating Drone Analyzer Device Management Service " + "Component", e); } @@ -71,7 +71,7 @@ public class DroneAnalyzerManagementServiceComponent { protected void deactivate(ComponentContext ctx) { if (log.isDebugEnabled()) { - log.debug("De-activating Virtual Firealarm Device Management Service Component"); + log.debug("De-activating Drone Analyzer Device Management Service Component"); } try { if (firealarmServiceRegRef != null) { @@ -80,12 +80,12 @@ public class DroneAnalyzerManagementServiceComponent { if (log.isDebugEnabled()) { log.debug( - "Virtual Firealarm Device Management Service Component has been " + + "Drone Analyzer Device Management Service Component has been " + "successfully de-activated"); } } catch (Throwable e) { log.error( - "Error occurred while de-activating Virtual Firealarm Device Management " + + "Error occurred while de-activating Drone Analyzer Device Management " + "bundle", e); } diff --git a/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImplTest.java b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImplTest.java new file mode 100644 index 0000000000..32b36fe49b --- /dev/null +++ b/components/device-mgt-iot-droneanalyzer/org.wso2.carbon.device.mgt.iot.droneanalyzer/src/test/java/org/wso2/carbon/device/mgt/iot/droneanalyzer/plugin/impl/dao/impl/DroneAnalyzerDeviceDAOImplTest.java @@ -0,0 +1,25 @@ +package org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl.dao.impl; + +import org.junit.Before; +import org.junit.Test; +import org.wso2.carbon.device.mgt.iot.util.iotdevice.dao.IotDeviceManagementDAOException; + +/** + * Created by geesara on 12/9/15. + */ +public class DroneAnalyzerDeviceDAOImplTest { + DroneAnalyzerDeviceDAOImpl dao; + @Before + public void init(){ + dao = new DroneAnalyzerDeviceDAOImpl(); + } + + //@Test + public void testDBConnenction(){ + try { + dao.deleteIotDevice("device1"); + } catch (IotDeviceManagementDAOException e) { + e.printStackTrace(); + } + } +} diff --git a/components/device-mgt-iot-droneanalyzer/pom.xml b/components/device-mgt-iot-droneanalyzer/pom.xml index fbbeef1c0e..692b9b6e69 100644 --- a/components/device-mgt-iot-droneanalyzer/pom.xml +++ b/components/device-mgt-iot-droneanalyzer/pom.xml @@ -32,8 +32,8 @@ device-mgt-iot-droneanalyzer 1.9.2-SNAPSHOT - org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl - org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl + org.wso2.carbon.device.mgt.iot.droneanalyzer + org.wso2.carbon.device.mgt.iot.droneanalyzer.api pom WSO2 Carbon - IoT Device Drone Analyzer Management Component diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/pom.xml b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/pom.xml index d364098abb..4ab113b21f 100644 --- a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/pom.xml +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/pom.xml @@ -22,11 +22,11 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl + org.wso2.carbon.device.mgt.iot.droneanalyzer org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl + org.wso2.carbon.device.mgt.iot.droneanalyzer.api war @@ -71,7 +71,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.droneanalyzer.service.impl + org.wso2.carbon.device.mgt.iot.droneanalyzer.api war true @@ -105,7 +105,7 @@ - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.droneanalyzer.plugin.impl:${carbon.iot.device.mgt.version} + org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.droneanalyzer:${carbon.iot.device.mgt.version} diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/agent/deviceConfig.properties b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/agent/deviceConfig.properties new file mode 100644 index 0000000000..bb1ae2c992 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/agent/deviceConfig.properties @@ -0,0 +1,33 @@ +# +# Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +# +# 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. +# +# + +#[Device-Configurations] +owner=${DEVICE_OWNER} +deviceId=${DEVICE_ID} +device-name=${DEVICE_NAME} +controller-context=/drone_analyzer/controller +https-ep=${HTTPS_EP} +http-ep=${HTTP_EP} +apim-ep=${APIM_EP} +mqtt-ep=${MQTT_EP} +xmpp-ep=${XMPP_EP} +auth-method=token +auth-token=${DEVICE_TOKEN} +refresh-token=${DEVICE_REFRESH_TOKEN} +push-interval=15 + + diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/agent/sketch.properties b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/agent/sketch.properties new file mode 100644 index 0000000000..c124b1b08a --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/agent/sketch.properties @@ -0,0 +1 @@ +zipfilename=drone_analyzer.zip diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/configs/drone_analyzer.xml b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/configs/drone_analyzer.xml index f997831fe4..194d872399 100644 --- a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/configs/drone_analyzer.xml +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/configs/drone_analyzer.xml @@ -17,6 +17,14 @@ ~ under the License. --> + + + diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/dbscripts/h2.sql b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/dbscripts/h2.sql index 340ba6a70c..f7dac408b6 100644 --- a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/dbscripts/h2.sql +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/dbscripts/h2.sql @@ -1,11 +1,11 @@ -- ----------------------------------------------------- --- Table `FIREALARM_DEVICE` +-- Table `DRONE_DEVICE` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `VIRTUAL_FIREALARM_DEVICE` ( - `VIRTUAL_FIREALARM_DEVICE_ID` VARCHAR(45) NOT NULL , +CREATE TABLE IF NOT EXISTS `DRONE_DEVICE` ( + `DRONE_DEVICE_ID` VARCHAR(45) NOT NULL , `DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (`VIRTUAL_FIREALARM_DEVICE_ID`) ); + PRIMARY KEY (`DRONE_DEVICE_ID`) ); diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/dbscripts/mysql.sql b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/dbscripts/mysql.sql index 432ecbb0ef..525190452a 100644 --- a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/dbscripts/mysql.sql +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/dbscripts/mysql.sql @@ -1,10 +1,10 @@ -- ----------------------------------------------------- --- Table `FIREALARM_DEVICE` +-- Table `DRONE_DEVICE` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `VIRTUAL_FIREALARM_DEVICE` ( - `VIRTUAL_FIREALARM_DEVICE_ID` VARCHAR(45) NOT NULL , +CREATE TABLE IF NOT EXISTS `DRONE_DEVICE` ( + `DRONE_DEVICE_ID` VARCHAR(45) NOT NULL , `DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (`VIRTUAL_FIREALARM_DEVICE_ID`) ) + PRIMARY KEY (`DRONE_DEVICE_ID`) ) ENGINE = InnoDB; diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.hbs b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.hbs new file mode 100644 index 0000000000..7510ca8c00 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.hbs @@ -0,0 +1,170 @@ +{{unit "cdmf.unit.lib.service-invoker-utility"}} +{{unit "cdmf.unit.lib.handlebars"}} +{{#defineZone "device-detail-top"}} +
+
+ +
+
+{{/defineZone}} + + +
+ +
+
+
+
+
+
+ +
+
+
+
Device Overview - Virtual Firealarm
+ {{#defineZone "device-detail-properties"}} + + + + + + {{#if device.viewModel.udid}} + + {{/if}} + {{#if device.viewModel.phoneNumber}} + + {{/if}} + + + + + +
Device{{device.viewModel.vendor}} {{device.properties.model}}
Model{{device.viewModel.model}}
IMEI{{device.viewModel.imei}}
UDID{{device.viewModel.udid}}
Phone Number{{device.viewModel.phoneNumber}}
Status + {{#equal device.status "ACTIVE"}} Active{{/equal}} + {{#equal device.status "INACTIVE"}} Inactive{{/equal}} + {{#equal device.status "BLOCKED"}} Blocked{{/equal}} + {{#equal device.status "REMOVED"}} Removed{{/equal}} +
+ {{/defineZone}} +
Operations
+
+ {{unit "cdmf.unit.device.iot-operation" deviceType=device.type}} +
+
+
+
+ +
+ + {{#defineZone "device-detail-properties"}} +
+
+ +
+
Device Details
+ {{unit "iot.unit.device.stats" deviceType=device.type}} +
+ +
+
Policy Compliance
+
+ +
+
+ Not available yet +
+
+
+
+
+
+
Device Location
+
+
+ +
+
+ Not available yet +
+
+
+
+
+
Installed Applications
+
+ +
+
+ Not available yet +
+
+
+
+
+
+
Operations Log
+
+ +
+
+ Not available yet +
+
+
+
+
+
+
+ {{/defineZone}} +
+
+
+ +
+ +{{#zone "bottomJs"}} + + + + {{js "js/device-detail.js"}} + + {{js "js/load-map.js"}} +{{/zone}} \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.js new file mode 100644 index 0000000000..5bb4a01d22 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.js @@ -0,0 +1,25 @@ +function onRequest(context) { + var log = new Log("detail.js"); + var deviceType = context.uriParams.deviceType; + var deviceId = request.getParameter("id"); + + if (deviceType != null && deviceType != undefined && deviceId != null && deviceId != undefined) { + var deviceModule = require("/modules/device.js").deviceModule; + var device = deviceModule.viewDevice(deviceType, deviceId); + + if (device) { + var viewModel = {}; + var deviceInfo = device.properties.DEVICE_INFO; + if (deviceInfo != undefined && String(deviceInfo.toString()).length > 0) { + deviceInfo = parse(stringify(deviceInfo)); + viewModel.system = device.properties.IMEI; + viewModel.machine = "Drone Analyzer"; + viewModel.vendor = device.properties.VENDOR; + } + device.viewModel = viewModel; + } + context.device = device; + + return context; + } +} \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.json new file mode 100644 index 0000000000..9eecd8f5bf --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/device-view.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/images/thumb.png b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/images/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..6bbaf4b50890672663b5a4ff05ceb17d307738be GIT binary patch literal 76844 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 JotR1R{{Wjm!aD!} literal 0 HcmV?d00001 diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/js/device-detail.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/js/device-detail.js new file mode 100644 index 0000000000..730a132be5 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/js/device-detail.js @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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 () { + var deviceId = $(".device-id"); + var deviceIdentifier = deviceId.data("deviceid"); + var deviceType = deviceId.data("type"); + var payload = [deviceIdentifier]; + var operationTable; + if (deviceType == "ios") { + var serviceUrl = "/ios/operation/deviceinfo"; + } else if (deviceType == "android") { + var serviceUrl = "/mdm-android-agent/operation/device-info"; + } + if(serviceUrl){ + invokerUtil.post(serviceUrl, payload, + function(message){ + console.log(message); + }, function (message) { + console.log(message); + }); + } + $(document).ready(function(){ + $(".panel-body").removeClass("hidden"); + $("#loading-content").remove(); + loadOperationBar(deviceType); + loadOperationsLog(); + loadApplicationsList(); + loadPolicyCompliance(); + + $("#refresh-policy").click(function () { + $('#policy-spinner').removeClass('hidden'); + loadPolicyCompliance(); + }); + + $("#refresh-apps").click(function () { + $('#apps-spinner').removeClass('hidden'); + loadApplicationsList(); + }); + + $("#refresh-operations").click(function () { + $('#operations-spinner').removeClass('hidden'); + loadOperationsLog(true); + }); + + }); + + function loadOperationsLog(update) { + var operationsLog = $("#operations-log"); + var deviceListingSrc = operationsLog.attr("src"); + var deviceId = operationsLog.data("device-id"); + var deviceType = operationsLog.data("device-type"); + + $.template("operations-log", deviceListingSrc, function (template) { + var serviceURL = "/devicemgt_admin/operations/"+deviceType+"/"+deviceId; + + var successCallback = function (data) { + data = JSON.parse(data); + $('#operations-spinner').addClass('hidden'); + var viewModel = {}; + viewModel.operations = data; + if(data.length > 0){ + var content = template(viewModel); + if(!update) { + $("#operations-log-container").html(content); + operationTable = $('#operations-log-table').datatables_extended(); + }else{ + $('#operations-log-table').dataTable().fnClearTable(); + for(var i=0; i < data.length; i++) { + var status; + if(data[i].status == "COMPLETED") { + status = " Completed"; + } else if(data[i].status == "PENDING") { + status = " Pending"; + } else if(data[i].status == "ERROR") { + status = " Error"; + } else if(data[i].status == "IN_PROGRESS") { + status = " In Progress"; + } + + $('#operations-log-table').dataTable().fnAddData([ + data[i].code, + status, + data[i].createdTimeStamp + ]); + } + } + } + + }; + invokerUtil.get(serviceURL, + successCallback, function(message){ + console.log(message); + }); + }); + + } + + function loadApplicationsList() { + var applicationsList = $("#applications-list"); + var deviceListingSrc = applicationsList.attr("src"); + var deviceId = applicationsList.data("device-id"); + var deviceType = applicationsList.data("device-type"); + + $.template("application-list", deviceListingSrc, function (template) { + var serviceURL = "/devicemgt_admin/operations/"+deviceType+"/"+deviceId+"/apps"; + + var successCallback = function (data) { + data = JSON.parse(data); + $('#apps-spinner').addClass('hidden'); + var viewModel = {}; + if(data != null && data.length > 0) { + for (var i = 0; i < data.length; i++) { + data[i].name = data[i].name.replace(/[^\w\s]/gi, ' '); + data[i].name = data[i].name.replace(/[0-9]/g, ' '); + } + } + viewModel.applications = data; + viewModel.deviceType = deviceType; + if(data.length > 0){ + var content = template(viewModel); + $("#applications-list-container").html(content); + } + + }; + invokerUtil.get(serviceURL, + successCallback, function(message){ + console.log(message); + }); + }); + } + + function loadPolicyCompliance() { + var policyCompliance = $("#policy-view"); + var policySrc = policyCompliance.attr("src"); + var deviceId = policyCompliance.data("device-id"); + var deviceType = policyCompliance.data("device-type"); + var activePolicy = null; + + $.template("policy-view", policySrc, function (template) { + var serviceURLPolicy ="/devicemgt_admin/policies/"+deviceType+"/"+deviceId+"/active-policy" + var serviceURLCompliance = "/devicemgt_admin/policies/"+deviceType+"/"+deviceId; + + var successCallbackCompliance = function (data) { + var viewModel = {}; + viewModel.policy = activePolicy; + viewModel.deviceType = deviceType; + if(data != null && data.complianceFeatures!= null && data.complianceFeatures != undefined && data.complianceFeatures.length > 0) { + viewModel.compliance = "NON-COMPLIANT"; + viewModel.complianceFeatures = data.complianceFeatures; + var content = template(viewModel); + $("#policy-list-container").html(content); + } else { + viewModel.compliance = "COMPLIANT"; + var content = template(viewModel); + $("#policy-list-container").html(content); + $("#policy-compliance-table").addClass("hidden"); + } + + }; + + var successCallbackPolicy = function (data) { + data = JSON.parse(data); + $('#policy-spinner').addClass('hidden'); + if(data != null && data.active == true){ + activePolicy = data; + invokerUtil.get(serviceURLCompliance, + successCallbackCompliance, function(message){ + console.log(message); + }); + } + }; + + invokerUtil.get(serviceURLPolicy, + successCallbackPolicy, function(message){ + console.log(message); + }); + }); + + } + +}()); diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/js/load-map.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/js/load-map.js new file mode 100644 index 0000000000..92ae2d2d8d --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/js/load-map.js @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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. + */ + +$(document).ready(function(){ + if (document.getElementById('device-location')){ + loadMap(); + } +}); + +function loadMap() { + var map; + function initialize() { + var mapOptions = { + zoom: 18 + }; + var lat = $("#device-location").data("lat"); + var long = $("#device-location").data("long"); + + if(lat != null && lat != undefined && lat != "" && long != null && long != undefined && long != "") { + $("#map-error").hide(); + $("#device-location").show(); + map = new google.maps.Map(document.getElementById('device-location'), + mapOptions); + + var pos = new google.maps.LatLng(lat, + long); + var marker = new google.maps.Marker({ + position: pos, + map: map + }); + + map.setCenter(pos); + }else{ + $("#device-location").hide(); + $("#map-error").show(); + } + + } + google.maps.event.addDomListener(window, 'load', initialize); +} \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/applications-list.hbs b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/applications-list.hbs new file mode 100644 index 0000000000..8fba28621b --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/applications-list.hbs @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/operations-log.hbs b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/operations-log.hbs new file mode 100644 index 0000000000..cc5db5117a --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/operations-log.hbs @@ -0,0 +1,24 @@ + + + + + + + + + + {{#each operations}} + + + + + + {{/each}} +
+ +
Operation CodeStatusRequest created at
{{code}} + {{#equal status "COMPLETED"}} Completed{{/equal}} + {{#equal status "PENDING"}} Pending{{/equal}} + {{#equal status "ERROR"}} Error{{/equal}} + {{#equal status "IN_PROGRESS"}} In Progress{{/equal}} + {{createdTimeStamp}}
\ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/policy-compliance.hbs b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/policy-compliance.hbs new file mode 100644 index 0000000000..6dabda7870 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.device-view/public/templates/policy-compliance.hbs @@ -0,0 +1,79 @@ +
+ +
+
+ + {{#equal deviceType "android"}} + + {{/equal}} + {{#equal deviceType "ios"}} + + {{/equal}} + {{#equal deviceType "windows"}} + + {{/equal}} + + +

{{policy.policyName}}

+ {{deviceType}} +
+
+
+
+
+
+ Ownership Type : {{policy.ownershipType}} +
+
+
+
+ Compliance Type : {{policy.compliance}} +
+
+
+
+ Compliance : + {{#equal compliance "COMPLIANT"}} + Compliant + {{/equal}} + {{#equal compliance "NON-COMPLIANT"}} + Not Compliant + {{/equal}} +
+
+
+
+ +
+
+
+ + + + + + + + + {{#each complianceFeatures}} + + + + + {{/each}} +
+ +
FeatureCompliance
{{featureCode}} + {{#equal compliance true}} Compliant{{/equal}} + {{#equal compliance false}} Not Compliant{{/equal}} +
\ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/private/conf/device-type.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/private/conf/device-type.json new file mode 100644 index 0000000000..a3bb4ef8cc --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/private/conf/device-type.json @@ -0,0 +1,8 @@ +{ + "deviceType": { + "label": "Drone Analyzer", + "category": "iot", + "downloadAgentUri": "https://localhost:9443/virtual_firealarm/VirtualFireAlarmDeviceManager/manager/device/virtual_firealarm/download", + "downloadAgentLinkGenUri" : "https://localhost:9443/virtual_firealarm/VirtualFireAlarmDeviceManager/manager/device/virtual_firealarm/generate_link" + } +} \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/css/charisma-app.css b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/css/charisma-app.css new file mode 100644 index 0000000000..12b14187f8 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/css/charisma-app.css @@ -0,0 +1,727 @@ +@import url(https://fonts.googleapis.com/css?family=Shojumaru); + +select { + background-color: #fff; +} + +.ch-container { + padding: 0 15px; +} + +.top-block { + border-radius: 20px; + font-size: 14px; + text-align: center; + padding: 5px; + margin-bottom: 10px; + font-weight: bold; + position: relative; + display: block; + line-height: 22px; + text-shadow: 0 0 1px #DDD; + text-decoration: none; + -webkit-box-shadow: inset 0 0 0 1px #FAFAFA; + -moz-box-shadow: inset 0 0 0 1px #FAFAFA; + box-shadow: inset 0 0 0 1px #FAFAFA; + background: -moz-linear-gradient(top, rgba(30, 87, 153, 0.2) 0%, rgba(125, 185, 232, 0) 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(30, 87, 153, 0.2)), color-stop(100%, rgba(125, 185, 232, 0))); + background: -webkit-linear-gradient(top, rgba(30, 87, 153, 0.2) 0%, rgba(125, 185, 232, 0) 100%); + background: -o-linear-gradient(top, rgba(30, 87, 153, 0.2) 0%, rgba(125, 185, 232, 0) 100%); + background: -ms-linear-gradient(top, rgba(30, 87, 153, 0.2) 0%, rgba(125, 185, 232, 0) 100%); + background: linear-gradient(to bottom, rgba(30, 87, 153, 0.2) 0%, rgba(125, 185, 232, 0) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#331e5799', endColorstr='#007db9e8', GradientType=0); +} + +.top-block span { + clear: both; +} + +.top-block i { + font-size: 25px; +} + +.top-block:hover { + text-decoration: none; +} + +.notification { + display: block; + position: absolute; + top: -10px; + right: -5px; + line-height: 16px; + height: 16px; + padding: 0 5px; + font-family: Arial, sans-serif; + color: white !important; + text-shadow: 0 1px hsla(0, 0%, 0%, 0.25); + border-width: 1px; + border-style: solid; + border-radius: 10px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-box-shadow: 0 1px 1px hsla(0, 0%, 0%, 0.08), inset 0 1px hsla(0, 100%, 100%, 0.3); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.08), inset 0 1px rgba(255, 255, 255, 0.3); + box-shadow: 0 1px 1px hsla(0, 0%, 0%, 0.08), inset 0 1px hsla(0, 100%, 100%, 0.3); +} + +.notification { + border-color: #2FABE9; + background-color: #67C2EF; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, hsl(200, 80%, 82%)), color-stop(100%, hsl(200, 81%, 67%))); + background-image: -webkit-linear-gradient(top, hsl(200, 80%, 82%), hsl(200, 81%, 67%)); + background-image: -moz-linear-gradient(top, hsl(200, 80%, 82%), hsl(200, 81%, 67%)); + background-image: -ms-linear-gradient(top, hsl(200, 80%, 82%), hsl(200, 81%, 67%)); + background-image: -o-linear-gradient(top, hsl(200, 80%, 82%), hsl(200, 81%, 67%)); + background-image: linear-gradient(top, hsl(200, 80%, 82%), hsl(200, 81%, 67%)); +} + +.notification.green { + border-color: #5AAD34; + background-color: #78CD51; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, hsl(101, 54%, 71%)), color-stop(100%, hsl(101, 55%, 56%))); + background-image: -webkit-linear-gradient(top, hsl(101, 54%, 71%), hsl(101, 55%, 56%)); + background-image: -moz-linear-gradient(top, hsl(101, 54%, 71%), hsl(101, 55%, 56%)); + background-image: -ms-linear-gradient(top, hsl(101, 54%, 71%), hsl(101, 55%, 56%)); + background-image: -o-linear-gradient(top, hsl(101, 54%, 71%), hsl(101, 55%, 56%)); + background-image: linear-gradient(top, hsl(101, 54%, 71%), hsl(101, 55%, 56%)); +} + +.notification.yellow { + border-color: #F4A506; + background-color: #FABB3D; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, hsl(40, 95%, 76%)), color-stop(100%, hsl(40, 95%, 61%))); + background-image: -webkit-linear-gradient(top, hsl(40, 95%, 76%), hsl(40, 95%, 61%)); + background-image: -moz-linear-gradient(top, hsl(40, 95%, 76%), hsl(40, 95%, 61%)); + background-image: -ms-linear-gradient(top, hsl(40, 95%, 76%), hsl(40, 95%, 61%)); + background-image: -o-linear-gradient(top, hsl(40, 95%, 76%), hsl(40, 95%, 61%)); + background-image: linear-gradient(top, hsl(40, 95%, 76%), hsl(40, 95%, 61%)); +} + +.notification.red { + border-color: #FA5833; + background-color: #FA603D; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, hsl(11, 95%, 76%)), color-stop(100%, hsl(11, 95%, 61%))); + background-image: -webkit-linear-gradient(top, hsl(11, 95%, 76%), hsl(11, 95%, 61%)); + background-image: -moz-linear-gradient(top, hsl(11, 95%, 76%), hsl(11, 95%, 61%)); + background-image: -ms-linear-gradient(top, hsl(11, 95%, 76%), hsl(11, 95%, 61%)); + background-image: -o-linear-gradient(top, hsl(11, 95%, 76%), hsl(11, 95%, 61%)); + background-image: linear-gradient(top, hsl(11, 95%, 76%), hsl(11, 95%, 61%)); +} + +.box { + margin-top: 10px; + margin-bottom: 10px; +} + +.box-inner { + border: 1px solid #DEDEDE; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + box-shadow: 0 0 10px rgba(189, 189, 189, 0.4); + -webkit-box-shadow: 0 0 10px rgba(189, 189, 189, 0.4); + -moz-box-shadow: 0 0 10px rgba(189, 189, 189, 0.4); +} + +.box-header { + border: none; + padding-top: 5px; + border-bottom: 1px solid #DEDEDE; + border-radius: 3px 3px 0 0; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + height: 35px; + min-height: 35px !important; + margin-bottom: 0; + font-weight: bold; + font-size: 16px; + background: -moz-linear-gradient(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.1) 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(0, 0, 0, 0.1))); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.1) 100%); + background: -o-linear-gradient(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.1) 100%); + background: -ms-linear-gradient(top, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.1) 100%); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.1) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffffff', endColorstr='#1a000000', GradientType=0); + +} + +.box-header h2 { + font-size: 15px; + width: auto; + clear: none; + float: left; + line-height: 25px; + white-space: nowrap; + font-weight: bold; + margin-top: 0; + margin-bottom: 0; +} + +.box-header h3 { + font-size: 13px; + width: auto; + clear: none; + float: left; + line-height: 25px; + white-space: nowrap; +} + +.box-header h2 > i { + margin-top: 1px; +} + +.box-icon { + float: right; +} + +.box-icon a { + clear: none; + float: left; + margin: 0 2px; + height: 20px; + width: 5px; + margin-top: 1px; +} + +.box-icon a i { + margin-left: -6px; + top: -1px; +} + +.box-content { + padding: 10px; +} + +.btn-round { + border-radius: 40px; + -webkit-border-radius: 40px; + -moz-border-radius: 40px; + font-size: 12px; + padding-top: 4px; +} + +ul.dashboard-list li { + padding: 7px 0; + list-style: none; + border-bottom: 1px solid #EBEBEB; + border-top: 1px solid white; +} + +ul.dashboard-list a:hover { + text-decoration: none; +} + +ul.dashboard-list { + margin: 0; +} + +ul.dashboard-list li a span { + display: inline-block; + font-size: 18px; + font-weight: bold; + margin-right: 10px; + text-align: right; + width: 70px; + zoom: 1; +} + +.dashboard-avatar { + height: 50px; + width: 50px; + padding: 1px; + float: left; + margin-left: 15px; + margin-right: 15px; + border: 1px solid #EBEBEB; + border-radius: 50%; +} + +.thumbnail { + background-color: white; + z-index: 2; + position: relative; + margin-bottom: 40px !important; +} + +.thumbnails > li { + display: inline-block; + margin-left: 15px; +} + +.thumbnail img, .thumbnail > a { + z-index: 2; + height: 100px; + width: 100px; + position: relative; + display: block; +} + +img.grayscale { + -webkit-filter: grayscale(1); + -webkit-filter: grayscale(100%); + -moz-filter: grayscale(100%); + -ms-filter: grayscale(100%); + -o-filter: grayscale(100%); +} + +.thumbnail .gallery-controls { + position: absolute; + z-index: 1; + margin-top: -30px; + height: 30px; + min-height: 30px; + padding: 0 6.5px; +} + +.thumbnail .gallery-controls p { + display: block; + margin: auto; + width: 100%; +} + +div.uploader { + border-radius: 14px; + -webkit-border-radius: 14px; + -moz-border-radius: 14px; +} + +footer { + clear: both; +} + +div.center, p.center, img.center { + margin-left: auto !important; + margin-right: auto !important; + float: none !important; + display: block; + text-align: center; +} + +.stackControls { + padding: 5px; +} + + +.sidebar-nav { + min-height: 0; + box-shadow: 0 0 10px #BDBDBD; + border-radius: 5px; + margin-bottom: 0; + padding-bottom: 0; + max-height: none; +} + +.sidebar-nav > ul > li:not(.nav-header) { + margin-right: -2px; + margin-left: -2px; +} + +.navbar-brand { + font-family: 'Shojumaru', cursive, Arial, serif; + letter-spacing: 2px; + text-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5); + width: 183px; + font-size: 17px; +} + +.navbar-brand img { + float: left; + height: 20px; + width: 20px; + margin-right: 5px; +} + +.navbar-brand span { + float: left; +} + +.theme-container { + z-index: 5; +} + +.navbar-search { + margin-left: 10px; + margin-top: 7px; +} + +.navbar-inner { + padding-top: 5px; + padding-bottom: 5px; + line-height: 30px; + height: 60px; +} + + + +.navbar-inner .btn-group { + margin: 7px 5px 0 5px; +} + +ul.ajax-loaders li { + display: inline-block; + list-style: none; + padding: 10px; +} + +ul.ajax-loaders { + min-height: 80px; +} + +.bs-icons li { + list-style: none; +} + +#for-is-ajax { + padding-left: 12px; + cursor: pointer; +} + +#loading { + margin-top: 20px; + width: 128px; + font-weight: bold; +} + +#loading div.center { + margin-top: 10px; + height: 15px; + width: 128px; + background: url(../img/ajax-loaders/ajax-loader-6.gif); +} + +.box-content .nav-tabs { + margin-right: -10px; + margin-left: -10px; +} + + +.login-header { + padding-top: 30px; + height: 120px; +} + +.pull-left { + float: left !important; +} + +.pull-right { + float: right !important; +} + +.remember { + margin-top: 3px; +} + +.green { + color: #458746; +} + +.red { + color: #B94846; +} + +.blue { + color: #3986AC; +} + +.yellow { + color: #F99406; +} + +.login-box .input-prepend { + margin-bottom: 10px; +} + +.login-box .btn { + margin-top: 15px; + width: 100% +} + +.box-content.buttons { + min-height: 297px; +} + +.main-menu > li > a { + border: 1px solid rgba(221, 221, 221, 0.46); +} + +.main-menu > li { + margin-top: 0 !important; +} + +.sidebar-nav .nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 18px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.navbar { + border-radius: 0; +} + +ul.main-menu li:hover { + margin-left: 8px; +} + +ul.main-menu li.active { + margin-left: 8px; +} + +ul.main-menu li.nav-header:hover { + margin-left: 0; +} + +ul.main-menu li:not(.nav-header) { + -webkit-transition: .3s; + -moz-transition: .3s; + -ms-transition: .3s; + -o-transition: .3s; + transition: .3s; +} + +.accordion > ul { + display: none; + margin-left: 10px; +} + +.nav-sm { + display: none; +} +.preview-on-phone { + height: 380px; + +} + +.powered-by { + text-align: right; +} + +.whitespace:before { + content: "\2122"; + color: transparent !important; +} + +.center-block { + float: none !important; + text-align: center; +} + +ul.github-buttons li { + display: inline; +} + +.homepage-box { + height: 380px; +} + +.download-buttons a { + margin: 5px; +} + +.center-text { + text-align: center; +} + +/* Mobile */ +@media only screen and (max-width: 767px) { + + .navbar-brand { + font-family: 'Shojumaru', cursive, Arial, serif; + letter-spacing: 2px; + text-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5); + width: 40%; + font-size: 14px; + } + + .nav-sm { + display: block; + margin-bottom: 10px; + border-bottom: solid white 1px; + padding-bottom: 10px; + } + + .sidebar-nav .nav-canvas { + top: -20px; + left: -90%; + position: absolute; + width: 80%; + z-index: 2; + background: rgba(0, 0, 0, 0.8); + margin: 0 !important; + border-radius: 0 0 20px 0; + padding-bottom: 10px; + will-change: left; + } + + .sidebar-nav.active .nav-canvas { + left: -20px; + border-right: solid 1px white; + border-bottom: solid 1px white; + } + + .sidebar-nav { + position: relative; + z-index: 3; + margin: 0 !important; + padding: 0; + } + + .nav-canvas { + -webkit-transition: .2s; + -moz-transition: .2s; + -ms-transition: .2s; + -o-transition: .2s; + transition: .2s; + } + + .sidebar-nav a { + border: none !important; + color: white; + } + + #for-is-ajax { + color: white; + margin-top: 15px; + } + + .main-menu .nav-header { + color: white; + } + + ul.main-menu li:hover { + margin-left: inherit; + } + + ul.main-menu li.active { + margin-left: inherit; + } + + ul.main-menu a:hover, .nav-sm a:hover { + background: none !important; + color: grey; + } + + .navbar-default .navbar-toggle:focus { + background-color: inherit; + } + + .navbar-default .navbar-toggle.active { + box-shadow: 0 0 7px rgb(0, 255, 40); + border: solid 1px white; + } + + .navbar-toggle { + margin-left: 5px; + margin-right: 0; + } + + .powered-by { + text-align: center; + } + + .copyright { + text-align: center; + } + + .table-wrapper .pinned { + box-shadow: 0 0 20px black; + } +} + +/* Tablet */ +@media only screen and (min-width: 768px) and (max-width: 979px) { + .box-icon { + display: none; + } + + .box-header h2 { + font-size: 13px !important; + } + + .box-header h3 { + font-size: 11px !important; + } + + .main-menu-span { + width: 6.2% !important; + margin-right: 4%; + } + + .top-menu > li i { + display: none; + } + + .sidebar-nav li span { + display: block !important; + } + + .sidebar-nav li a, .sidebar-nav .nav-header { + text-align: center + } + + .sidebar-nav { + padding: 0; + margin-bottom: 0; + } +} + +/* Computer */ +@media only screen and (min-width: 980px) { + a, button, input[type=submit], input[type=button], .product-img { + -webkit-transition: .5s; + -moz-transition: .5s; + -ms-transition: .5s; + -o-transition: .5s; + transition: .5s; + } + + .ch-container { + padding: 0 20px; + } +} + +/* MailChimp Form Embed Code - Slim - 08/17/2011 */ +.email-subscription-footer a { + font-weight: bold; + font-size: 16px; + letter-spacing: 1px; +} + +.email-subscription-footer { + float: right; + padding: 20px 0 0 20px; + text-align: center; +} + +.mc_embed_signup { + font: 14px Helvetica,Arial,sans-serif; +} +.power_field{position: absolute; left: -5000px;display: none;} +.mc_embed_signup form {display:block; position:relative; text-align:left; padding:10px 0 10px 3%} +.mc_embed_signup h2 {font-weight:bold; padding:0; margin:15px 0; font-size:1.4em;} +.mc_embed_signup input {border:1px solid #999; -webkit-appearance:none;} +.mc_embed_signup input[type=checkbox]{-webkit-appearance:checkbox;} +.mc_embed_signup input[type=radio]{-webkit-appearance:radio;} +.mc_embed_signup input:focus {border-color:#333;} +.mc_embed_signup .button {clear:both; background-color: #aaa; border: 0 none; border-radius:4px; color: #FFFFFF; cursor: pointer; display: inline-block; font-size:15px; font-weight: bold; height: 32px; line-height: 32px; margin: 0 5px 10px 0; padding:0; text-align: center; text-decoration: none; vertical-align: top; white-space: nowrap; width: auto;} +.mc_embed_signup .button:hover {background-color:#777;} +.mc_embed_signup .small-meta {font-size: 11px;} +.mc_embed_signup .nowrap {white-space:nowrap;} +.mc_embed_signup .clear {clear:none; display:inline;} + +.mc_embed_signup label {display:block; font-size:16px; padding-bottom:10px; font-weight:bold;} +.mc_embed_signup input.email {display:block; padding:8px 0; margin:0 4% 10px 0; text-indent:5px; width:58%; min-width:130px;} +.mc_embed_signup input.button {display:block; width:35%; margin:0 0 10px 0; min-width:90px;} + +.mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%;margin: 0 5%; clear: both;} +.mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;} +.mc_embed_signup #mce-error-response {display:none;} +.mc_embed_signup #mce-success-response {color:#529214; display:none;} +.mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;} + diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/drone_position_controller/background_drone.png b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/drone_position_controller/background_drone.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ce7dc40d87da479b11193a13a91c2f68363547 GIT binary patch literal 26787 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 literal 0 HcmV?d00001 diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/drone_position_controller/pitch_drone.png b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/drone_position_controller/pitch_drone.png new file mode 100644 index 0000000000000000000000000000000000000000..84afb8f1888ebec0dbd5cb4b8c3bde86c3bc05de GIT binary patch literal 20046 zcmZ^JV{j%+6YZ0YZQHhO+cutHW82Qgwr$(yW@Fp7lly*E_vgJodQR0;&s25KR89Ap z6RD&i2@it<0{{TvrKQAF{=@PA85G2SV~tjA?tcL7Af@dL0KlUD&p-f~*;oJojG~pO zsFISUy^FoGrM&}@w5TYNgOk05)o*hEz+*i}6{x0qhQa@`{U{ zfR;c(Lkx{16G2?ChORt-EG`a)JDwi_8XFrBgRV>m7X`Blc}QFs8(b6-HTkjUU1YP| z{c=3>-LfKZQvHzAGzZxa1(zzts>~h$S0O@xyc;|=Ji2$tAQT8g<^Vu~YBD2s{vrhd zy!!F+(USB-_5wgW7GR+O{qkA;OnBixi02|1dLRKIApI^0T(VFBXaFIvSdmhIkOW9T zPCA7uARi21G-YaX08pX_7*YBkF8~5^UNgKw0J_P<=pgwC03uZL2r+;qFQ9r(BT5{g z#RNdJkR9d*tkMIRq%|$10QGHv{#hj0MgSBXfJr$blo|l$4KNxfCG`M=WB|}4?lt-D zXls#9X#UGoMk8Mb8Mk<#E)=~Zq^2eV0oANDCM_C=@h{^{A%;QE3~ZJ_HpJbBX#gNU z0sX&dAHFly5@t!|8gT<5Z|%3c64~SDl;siYdopx`wbj4?AQGI{pQE_ z`SP^eyH6I#q8}&;_PRSb{U}$0HQdiKOMyzyAUN+;`azEK)&% z23Q8~&AI>F2!2WClLG=Qq!S$h00S{H2DQm1!7(TRKrBCyrd}BLaR7_19|CUxd~*Qy z(}*KPglu?F1W5$OECA2Rh`KsRgeq*N9-qdDaZw1LtzX$PEXe_ZVNkstf!_h~-54r& zfT}wX8ccW`3e}i+Jp#leN{ciW3Ns`0m3Tl33?-V3Xd(hlnM5{$U5Z&HN{vWe3jdzp z=@)mnoK-Z=rgQak~ulBQJH@cu0^z?oD(NRq7e44nG17f97cZDU#Dgq{uqve zlfPA#i0g3zqGL?`r&y4z!@rprMu$WixagphOs5)1s^O|eaq2ayLAxTKOy?Th!B7Il z`=L3&+(n3t352DzqAp*f*JLzD+8Ns`KCn<+Yx--fYFSeV1Lr07VO zQQ}Y;k-Q^BhdIemB1Ks!JK}#yHx#S=L-{B1&rXH(jIJV!O$vuJX=2^XrV)}mnU08d zJoGTk$VG<@qCWRse zmxfWTqO!DdyAoFYL48UsuEIdow^l-(RrR0(dNH+1y)sAXLKRmPSixH!UI{F>R}(Du z)BcKt&>oT-QWPy#&TlY0=pH44HN|f7pd+?{uL^SwWFMwzm|632qv=Zj!taXaudFEG z7G;%T)ofCENVX7!JV|eM!TWjr^YR1lj~qM*R!ciO-t3PlB!a! zlDz2QsJ$x7DeV#O(*6iU5FV4E)T5LH#?6A~oT#p;Zk555VaW6IJk>H(+LYiHbcwn5 z*_BJJHtmKdiPr|pF#bj5K#Z{()jJ?NupPA>Euw&+Af}L&KbODGRFUr}r7q=_ z>A>qT<5UTKX@co>dozQqRc(yZVv#$kxM;=qp7=c=INOP;K2d$`6)WcRe zs#yz?KulnVbMQk%bfj$16hoQ-Ll*An)_BjMjLVaw{+`#rr<|;&tih}Djk;@&Ypd(< z&Ae&0JnCF+R_DJ%gkgEikeXD3^y z;3$KI_Vkigj+XRqSv+nAnpzIK-@QAZR}bO)Is32&-k9l(gFq6-d5-yrRZ%?}0)=}i8hNk8%Y<%rPqGo# z61t;~5Xy@9ZaH|ltt_5gj7&EoTNZwv9_HZ0gm_1hN@Dq>R^U1C*urh9+B~%Jd&Dlf zjgcS)a>Ax5z8YMc9;Q{K^i)lUYJ~=}5ooSy(Ki!0$(>r2OFMHl-88uo&zXIb_j83Z zh_aX1S`sF!Nsq5}+*57M-N@(YxdC&44o(}U0a4A@9@R=?yQElkrI}Xi*F)hYZxd)R zFc~z^0%CIks}6G%>U*)da;2}R#i+g0V*DPKgDZd@8C8q6ftiNxze=^~afBOgKiQYD zncQ4aHQZq~XYtSC?0B0#R~I3*GVM4G!47_Hy%~N-qxtITS$u;rZH8*2E4Wp(qo|Ls zz1zHOVs?gCP_0<)QSDugDt$vMyt>e`g=s(aeNK%B>m5#+F{D1svDsjuS7m^5LguUN6H}3TC z9PsLYvPbtx9mG5j&t9N+UI^fM*4<*ftM?!m2;K03_>9&fnfI9zS*n>Ix+c1viqit~ z%jer(pOPDdh}mp>+MY5GY7p!yt8`u?JoC?8%L;`?V6c&JchRCF6VsTNehZ&UD;ikwHi z;Y)(L-GK6?_i0Iewmv0a=lvJhbsM9DqXfMZ9<0m;j~X9W z1MZvd_%}s6h>C|kME+DimTwJDs(;HqlCYDKe!xJ}A3jZ4={NqXH;GK8ROA5wFLD4N zAQ%96`}q&g0037e0N~sR0N_an05I(n4M!vZ08vkAF<~{2^~)ajcKs#S>n~i>*_P$) zvT|7{;t-@?VmBiJAh>!CAiq&L9ppDvFS%B%IIoUN_52;}vbhv4UrW18aotUE)3DNv zylx^2gE|#9yzAIc@OB7o2&Dt)sXxQ{JwkXVa^gCPWQ*XjNP zcwrniOQ?VO!lLmI@HjzimVc3og@eP0;BnZ%tp4T`OZ{J$|IhUQd*%P#&=-Mo(_Upuk~wO2bxKm4Nh>w7=)u7Ma?x-e6X9VDc3vMWcSYUQF;gz=2l;OG6P{qcKD zkjv}iOLRrg>zR>*w(Ug-N57gs4soaLTKpzc;G~LAiM|bJ9?n7gPb;1}9FovaD-F*{ zs`I{KUbT@AQv3bwCuJ|ByhdA^kgYn0*!>=f0BTo{QM{4TAb3Uy3|UzH z-<$UPb{pdS=s6pP+06)$@Fx3vgndi)+jMwV|6u*0vd~v-eeK6XQm~zrQQ2#Xajr@c z4p}l>Z481XM~g%D+V5&QkdR%mlz5zA$o68aRKHBL%uv;7z+a(wK{M@r(;xr~E>VaL zjrhtk_{Q?h{9}g!P6oJ|PYk7vwhp@4`FP!REhx$HvkNYZ_;xHFPT&E27{&>@blO}f za`kOi^ah+9%qdubop0UCHeTaL$K$G80%`tov4#cK=;Ub%pq&ZV}Pceyz@oED!z9JyWz&dQTWM zU*wkyt_|@oN6wxdI_wnMiJ~$zVYLRoX4sX`U644;bc%W^SxtOiS$n~T8G6Y>x0`_s zJ|~me(&GtEu(yu(9+T5BnjEi_bOPTG3EtytsvEtnstzQP$QGw+$P5XZ8|$Eu?=P9+ zXYO}}fx{G9?aHrs{mWn}m~@z+s>lKm6)@M=bYwV(UARKn=Aa=@(^fJBJ5Pk?yE)7m zhd2f-qoaf#mls&z>DElFCDfpP(NRBe$?*9$g5K}P*9~^Wu;a%q18*+gsgv61tLY#=;DzB z1G4hXLCs)5VQhgr*jUMtCSK>?&YPd5rpMEGHc*Xud$d`+W7|y=sar`pl6vfw{{Q6v z$|A+^z&st|bCnn?LWN5A&?=>I`D=aOZ8bjs^d9~Nwc9a-Zrm~dhxoBC*OvKM4v zl;K7!@ysg1mqGX(GAD2*L9W`%YhhozsVDd~-_o~|lx*038}NY(%OZXkrv5o!M&8@0 zcj8o~6@!Hn5^|L{yozi^pI|LWmclh4T3LPDJ%zHCsJ7)E5!c#_T2?Ji88^eM=gdpjKINY_#JM% zK=?Ia-1O5yJl^{l_`Mg6_?D)J@;j9N57aA|a>d0MfAX%LU?gShg{<&%DDARaZ8}3> zyAT~e#jdYDT|8R4?NkR4{rMAIwKd#are)Kh$7HDSS(f2!6y3OjxLhoX=AYAF402d? zd4#GsNltCK7D3Sq+LL9zSX)zp^C%W|OLz&r)ClNAi3oJi3o}QX0TBI;xbRu6xiZ|K z%aK=q#Oe-*gTIg1j5qbujY2Z{1I#t}9lv?>n5xZYS1KGU&Q)2>sUWP&m&kFWo)8zm z$OI1qXdYRw!gRzc&TqttSH?p@b5{^~5he!cgkn4f`m7Yzj+TQac+3l`j3^$E@9RA!x zKJ2PHpR?5ERfh{|!N;|c_NB*tUrQq9+?D+SUz3ghS`*xIPndaq|J=0g^+*3LGrDmi zZtn=?nR`3Pf??>uHCl+?PF4OKY7XpluA(HvcvLYgQ@FK`P z-%U$;lw-3|@P*J_n(ZH@0a5+ELQ`X7i_Jt&GtrL2OcMWV>bSAFo~va-zr&h2-j^(R z;pgG4+tF8~P*Do4ZjOsPds>}tqt?4?P-9;vf=H3F%Jjct*L>3WiTP0pxz4*R&1@?#bv9KN>$x%pD$xF41Y@fsHolUIIZi4q5@9+8hFrqGKN&kz{ zx}BcGL-Sd^#>jdy&yp0KY-YHdj2-hMk1S5X!enF!vON`H?UWG9h?iy-B{*7}@S&=^ z{`QkN4G}APwa{FMup;25ylAOM>Q;s=Jy&hWjD?FTtU9TyQU1|umpJ)K%(0J=xlyR6 z0sAHiNDmb5dm;UWB+Mw7ii`(Pj_e?e?cnMMPs^F$^S^3lE99swuQ}cO-~Ot~W{4!X z#o=uh<@rLzWDnr#ND7R*QKGx@P09XSfD<@j2lSoH@>g_fj{&wZM{=oq zzU*@hvk4+GA^rmKN2k zOdox(VB-lSO(pH&jDzO41b2DGYItnMJm|W-vkq(0?oW`pwy}`tvLOqa>vQxNsbQ7D zu^6dA$nyK)15>x<9T(q9nERca(LPSFwGpWUW%AZ~HQ-Qqlvv4RU5zDcd7$1OSMyQ% z90EZc%-UR}S^R*p;JcEU(IWhjNECXzNF#NTEqtol*?L?eZQrN#{j+$oWqWjt#OF5A zAU)dNZtkLUu4Ufwk@Qp)_a{8AJ^U%uv^nKTwcE%Reu6*X89X$Y19;3!!~@C6>Z9C* zzJFERl+=6e?Rpip6MbnASv>4JNn_LmO7HJjTwHo zCbFjlA1VRK;LQe9&%O<;6P22;3pn4y!}d&zOQIH{h`=qvC{^~(#Kr^PJckoJ%4s7W z4(Ctb0I3P$<=K0|NGwV#=I?`-$G9$+$)Z37MR?&{V>~bS&+B`6y9O={T?7US6{cxw zYnAB8#k5nNj*|;AEDhL7@$(yRB4aX;KN@Y7*EdW=DukEAqyEWvtde%q^gJ`*M!z2UG zuXJ8lk#)(W%5|7zA=;`7JUn&~HE4(ws8SJ`FmBKZn=2|%S&g*#2o}%ws~4$Od2aa~ z8nKN+?PL@w79!=SrElqy!-DUQ!(V}o-#01}1m_f0@9sQQup$uDi#R66qOFh4|NP!Y z++)AxMdQmN8C|))r!F2#XuaGR3b|NLg_q73VPFB&@$U&f?4rp!Uwqh7B319&;_&5x zrJcMC)T+I+)+g=*8dC)jQA8F}L1ZA#Mj4QKQUXXVjLRg8OHi4hy{T}lr0wt4r4)xM zAKb?^*F5D*ml*!sgnkoa1YVzmVML0cd0I&feH}ySg};cAnOOqGVj(~b_f%|=0so2@ zW0hq$z$BeO7GQj~tgHTU;#siusBGv}QH`_)QPUBGbBf=MuqJx4N-IcqZGt?$5E1)BP|^AY3=gRaYo3s$yUP`eC-S6M~AT=xNPyTt2c}eCQVlz=*CpDVi zK&yrdo) z#QXOfy`M2dU8nnK3Bo!Bh6gCee8=K49ylyGJi*gGmnjkkE2u_%Il~Eh)40{UR9SrC zy9PnS`~kJlCMh~R6s=qZlR8xY)heI(`6nwKYw4N+v&ib-Dp zz(?z|{GD)+A)R79qK86SLQ>u5S$G~3@YnpG=QR6SseIg7wVp+Mwrn0q`ipNV(!1o4Sypng0W-U*9 zwE_wfTUnbY8z0^|(rkwdmQBpOESe7%-zhdIT}~UQUz5gO(pUb~X9MI@HJ?zFLZF`Nq_Y4xQ9bgP^ z&4O0I$(~n8Mitj2nY1ly+Mj?9OYPxrCBGkaBBLu#^2V<}2~ABEdx(ox>ZU9$VHTZQhkp8j)D0t0 zT=`82oAu+N)oQ@XG*1QJfg#uwYW4VacKv8vPM93<@&t7MV<$?P zMlyEWyTgX6(FxZya?DK^q>jZ9W?P!rC2L7DMP>{D>kdB+NyfFXs%qav`;tiv5GvK^ zOXZb;)Bwpu%?_u+W3j{wNqDmEl4C-cG?u0n`c-yCKPNYw4shCVEaapvcP3kDdnJ(? zliISbi>SYT<4gb>{*TSuP9@?kp(1%2O~n8r4mktCjxmrgpci1dd~v#MbMIxHciUU@ zD_tkVFfMHBK=y4gsg{};8#*CHYz0p-9iuWxQiWsM(}iTS#eT()jd#m=98AZY%-*VL z2*cs&VWrK$c00y4mg7TxsW8y(=Lmz8T#Lnv|4|_=PXMpC)FRfcwfDyH?p_oVbC83P zd4X;;Uw)lMg2NL@NcoKOg0scEGFYF*|=ulLQD(17pj>!Sqx zElXan`_-b?{!3}6xU!v(eYn9lEG=OzQgm5_$ zR<+w-$Gh#=sM&&4KE9?SJHG?W#Z3w*_+ryZv<;wnfoe>-ln{f9y%rhRW<(l!`xhiWUd|u~&?nBz zl&{C_4)*~=jJ}_Dih}-IK`B?!f2TdK zC$L-_`hyzw^UT`zr}x5j?8+TXTe%cmf4-(*_p^!S!q4`$`9dhYwK#m65Xk&z| zYu4MaX6)2cnwi$6`QC7g&bkzi@eymehH(HzqkWHOG22#wRH>aGV~7%`Lk z2yI$U$TXUq>LXs=L9)543{s>$C3^3jA3xu{DU3cJd$7F?J4lDRq;A7Q`0i5L^4o=n z)Uj{=sboc;y^#Bjzg~SU9{P4}Q+kGWGvLPfn z*iE#!hbSxy*LX6R#~@LY;YFe3>5y)43x2Ye{(KvxJ0aRmGxyB`2T(^F#D}6yRS|pH_B-k{Pb%!L%szM2Z@aMvg=*{Na8mkP`4f693Y4=fXfu4Ib)9PUxk+ekk zUWKn>O2{go(=K9^B>5fwhUF%bzq^B^QQ1&2mGurRd2i{gE-t3zesQ}1Es+<7PA>KF z4MxdPelOgX{z~_4^XE)NdiOn7Ja~J@GrF5LcuL{lL%v-0zdL7`s>Q$I_wGTDAXhp% z!>N}h|I-;ebqke>q6`O&JtfIXS|XN&oIpVsp;2nq*siA>PP>?g(hch=rIwGUESFtJ z{n>#YCQDB8mpFwYLeHemX+*GW*NZ6lMcKZHIqhIH*MCclIUus8_*c%6@NgaBWRo{l zpBSWi2{F9A%v}U{Or5mU5ncSKS6L-ffj-KPJ)2AeX>t|6tegmz@oa8kD?6&z3gszh zFjVT*5os$L@t#S(Xk!AAVG)vk?&|O>6KO)KB9%nm^6M+PK!?yvJA`J5=0@=)3~7nz zs9M49JDFl!QNu3%$2P-tU|p`kQcBa>cI)*~qyCciRlEW`-BAb9qPjLWc6Q}F6aA3O ztJZDSSzU&i?y2M_&mqcAUg><1gGjMmWOM?BaLZacDeyri871*wqYz{BZDlfwP$(Z& z$&I0YO{z8ux=)OnqGs+K9L=7@<^-^=PT+g!KQV=BB9Wke$MqxR@tl|Ic_1Z9ciqxb zUP8Fu2cqu5$?t^pt;SiH9(up9MeT!lK*C#D6vpGq8xHpNQB zir$4r^&cK9e)l7*zOoRC5j@#%=bqrTt~JRG{hz;2Lrn^2)zMG;&*+~xY^!?^e_Ha= z;R@rrzIwZKzXxXMLWWnzetEib@0)l0Wga!j_vyNw1tUZ^{bd|vlCU19`H zPi%H_=PFu8lrQ<7L{N6FUIsvHh)4Aj{P!bjC8yT+ofKY*Cmf4+yQKcyCOFJ_ z`AHaachy-=VB9<>v!*(q<^)llm!weh>aNmbscfwYl-`3oWuN#P=Rb}WKb|E&z?PaL z234$#r2>CJZdm2>49`Lkd1z?Ye;nKc+9BnKl}E{>=`3VKGIGr6k5=H+$PWMUVM)+$@$Ayk1V&VG~jNHtS{av!pa zc(rmLecGZAQ5-?YohKz8Fvuhw^U%7o2=iPnTubuH$+?Ez2gAJ|Jt%coA8xOk4o?4)3x?b_BtLw0qqlvV)EKOzX?p5@hc#0qICB z7P#LwVX^7>ijJ^S-aE?hoCiC%?!Mi46?m?iFLay@!8Co5yRIbR?AQC<`(E9vae5*y zUl%HZf+PJP)Jr>|L0F6@I@PmXKiC1Er~R;60w+S}_rcWH#kjknY5|8~Ux#JQD_c_) zl6i8=zVWoP{>Y3z7mQ67Uqy1i3CtJ7(kvtScK8#j`9jIUx zp5BqYy#}?A<70;i3`P9{SS~W>9KZSV4)0$+sVP5~B(di@`5az)$VfuX$y~VvWg7L$ z=!5}@JQS4;UfW`{_t%0yl(YVa%)JkseWRRyxB494cT1;DaYVLAt9o(gQQGS~Y{P+S z&40CBXmng05qlp+!<-Ss1H|e( z#xMPV7P0dBC-;g1UWb4G4mXn~#4k>A(EcKX=;KMdOH28wFpr#n$L^kwalyN2NW9N~ zO~22;av!A^wV#gE?RB?(@$%a?Rp3ynX~ZEiLxB+yRS?Y`EVd9;x^`2Ph)EY7L5!a? zb1$IdJzkzTz3;#Iynp-*Dhl|pQs((`_r3)?)< z+pheW`pw#4iVX@Qu>QUIBzODx^EwdaIAb+}*JowF*(7}{&HQp|iqTUWfbBG)Vlg<`7Kq+?eK#l1~Kp%OZWCzTy)l-1jJ*`;w@MR4mvtUX9_?AFrQn8wZKmP8u$~0Okx{JAGyzNP;7cR<}#Nd`>4`LbmmgmyBUTSxmDZX@eqCn;&VX6>Evc zA+ad=*zsZUK%%2ES?h$tH~D1Rm#2Pa6Ms;2A#xCn>ykuaa})fx>AEqzO-mg2-zo{HluVs5l+9GikfC0yg^B@zL;0e ztdk~KSnsj_=~jOsE>JdRld#CKpaKSDx;-D*=&sgibt>k2oq9&Kbmv0`huvE_1%r4k zwOHo+Rrj|)f*$D$iu|F@j2;N#bbK*SxCD}_(A%h{WF?Pig>q-Ksg?UZV~AeMbz9SI zwY`C3HyyFAZQl_sh+7kDl=O$UNwFoY95VKs!j44i2+h^Y*y`}L*6+1^ zYwANN|B?uA)OX9Ly7>rE#Tu~aFp!QUCWA+T^{SXK*H;y-x*pQ-nCPBX8c(2(l8)i? zjKk$QpB&(J9K7E&u;3nb<+x4@ylTzz?U9wr=goKke@B~sn+cjtqL58BHqyzCj*V$I z`S540@DKO>JcVmhAwE<-q|Wmna?zz$Z!yU*qQYn;I=+r47nLrHfD)gq z#D~pI9g`3hRLQ1ye3l&hp9TR^fd_>uDV|p`0>4{RPd#1@dk%DsL1R{F3L0$DRXK#j z;#Dn(l|y~fgOSm=vPyce+WU;8Is4)LoPbig>yNO@x&9r&Chtiv-w6A(Wavs3)7u zh~97Q6e$C4vMPT}h9&bo-q#m;>7O2rCy&c=G3j*h`*8+C!J=Vp5tY~yxHB7Yh!8%J z!~j_tY!cM1nCLuLurmDO&%K+TxT&32x89fF3$5l?qsH!B^Pt1@DMy~rI<24g2}T3Q z2mH3etm~uDF^t!SF>K40i6)Rvt6!|(=rUEeAMMRU?R7=23|uBhZv_MZKZF53&w6|U zWlyHsmxo&x*g{fuZUxZuWXB!*+V${)$`CU#FlDUU(E?VK6MU1H8S1yW8^0jj>-LnP zG=iC5}VNTCKX z)8nkUJ(oyf5D;(oiZ}bYgj+*@N5fy$S|UZ`1Og8bd4~yor-{4F-7lY+ZrXaELz7m% zUXwUaS50Gv3B=1xHepnb;}=OaCDBE$hHav;rhL6X<#hUC#9PR;!dN5rk?7s^X!hY` zxo1g~`(?#txV3*Cp*}qLyVHZn63N8y))~oVuq+bXQj^|>!y2H!pEq6{Ki4qtjx~Fp zV@?d;VOQj(2@m5vhe*XYnCH)g=N1Y=%|OYbJ>UvOeZtBUyp{y~MIhvddj+xC3c#`n z$8-@lB30a22Xqln#*}{*{B#wT()(|xA?Kjz^LI-@iOCd#FOm;anxLmck$XbebJ=5K z;@f<)OCJbd+Vs)N2z-dmV>p#5b0-oBqK1Wn|X+!DUr(*rb6 zP3UN$$Y45pbW@K$KOk-MNfeTiP}jktiAQ|>J?llVPq5UDvSwO(UsMQ8CQ0E6nwn2` zzRmZuc0>Ne{l1@kxvqU_+n|>!_o|U185XiYAU3M#l@OOre;&gUD;47`U=>fwPyD;6 zNfRk9Sl3{BFWYDFM{98qVdA|{wlw5-;%G$rK3x?es;pR*Gx;ohA%cqbNxaN1xc@U@ zmn+pomZjJeW!+ zPA=hxui??6*PgF3>LqT;X^^`+o zyYkS9s&H_zzDG?zPXDn85hPx}Ze@bp+__`;4wc1wk+d!`5s(^HM*?2y?@_Ev? z)l`3JUvyo~3832Oc}mJaH$)YzIq!77-kQ5Bp3!R57hB{vNTR(otMmF{Q2$pQv?4wL zdzN?mT6=$TR&tl2b7_di-m~fljHgs1gllC)se3Ic%sTyO}9xxaMJ?0a)&ciR=U=xqD9T-SEK_bw{7ZBA2Iwl_` zGy`lWZVxN}Lh$;BerZEaC9S+0sY{@7dGX2NH|`I=QG4=?P&AR}U0SCtgLtx)BD{ebo_*i#UFL%} z1+1}4J(8l4zMp<@zBiWlv)z!rZSu;(z3fJ8yjuURcJ*ycA7pg|M5ds@)V(D!b^{fC zzPIdz#n{bfjcfmSL!4LVUWNd*HC{T)#9~~B`kWC?@GM%7TEd8UJ%gTWZi_>2w-2&6 zM3S)%QdcPGU1RR3eGh+pgIb~YhX_7CyS}21^c^(Z#~N5OHQt9kx}@*#81Sb0m1*3Mza~ z_V`izaLPRIz1|%#2K#(so-m$8+5_ZwA6SUsf>gkKXuX zZ}hz}!cFsF4M?q%Ny0NhP_ogn@`HZ)zOB;pUkW#JK*(?}#y{*- zL%(omkFrAroc0~7d3wkVq4zx(^sO>NsWd}Siv9aQ_cUaxI6=3YlSWgNDOgTZxsv4I z)9NW`*)X>BNaqIjB$JmJP7jjKk*OV^kt84RBM97^rDos$_PcNCJDSGqi6$L2n7qH} z6K5H!9_EcxOSqetKlD^UCoQ3n>!gYtUL-)J#5tFsyCVaV#T4cwiAYn(s6ROvX!%S! zYdby5X812+H-`h`y%p18I*`8@BdmYp zlH~eq4`uirx8AYrs9rQ}K(l=OMdhflW}&T9aZS4}r=}t1QqHcr>Fyyb=jmppQ*)W7 z(u)?I^8;tbwjt<qaG1`ump)H43Z>QXz*cg)Z@5DBFI#dgdXADSIdr2K0P zW14^&l@&T)_3`dL+mtJqxZDY9G9IK2tayd13oYBM;Ae<*h;)Q6YYqZT4aQ4u zK2>EnQOkr*^Uo{Bl{!^3iAaKE3wkZAXJ1X*?kaw6w$yM5MSNf}JBMo>r_z1`tq+w` zv%ggk_^;Q9ut#D*vC{pKq``_!@*RegvC;+N_)sal5EyyCUkU_|j2qMRL(*xOYGK}* z6Zks>yyc#OM(fq^MO#a}zj4)3CR&*KRr*aJ^AHJ#ZN=2xq_xrr$8SR>9awby9eFPGqd4Jbm}MCH#uIJexB0)#2E#t={uo^1SS3| zU~Qp~pbn)d6ds)4_{74H)OHzk=DKW_#pdwu-^MKuU%kjJf{A>Ns|sK~HYp5H-XRxL=u+|v9ydfBNrL^0cIZ1VGY3A69cschTI zi+-iQd-{Il3F1ja19NV#9L9eA9q`+dKs=R|EJ1|-Vx@-I)-QW)EPJ{E*cSnM%xLm- z{-OOf-h)J99qDGnV>JU)`!O6o-mOw1<<#PQrdIk1z@qbjP*4T08r?vY*G?8l=-`xGZ*$-&IA$1v(rv8h& zGrc}`4Ky)}L1plxT>Hy+-Fy8I!{^2OW)z){Sil=$!rvh#E-n;;G^l=XZ~*H430TWv zg=rhvjp;~<`cv)kxQ#T%nZr;RVIc&FBm+Y?G?c4QbZW9ao+uZ6z|htpnk^uSurW3d zPk{8F?0kwVqKT>1omdaIGnM+qssBKI{d2Yi$3^8xX1k|S?k^aX@A_CQ7`9gG0ak?& zM205(UyB#}WR8Iz{zBhPDD(iQF0>IrK1$dT$xcf!>fkcQc{|R}Iq#OxRrf{W?)w7E zRUwtBEKSeR@Wo^ws*`UL5Cecv_ySh0TJ>EK+I5)4eOP*T5}bAYJWAT@`F*W?S5$XK zcnv2f3-!dCsK-HU=SHS}zXFhhsN3;o_|$>fdMM`Qe|^&bd%MgI!dixBEu8ZDUBW?v zAaqySdaq#;V!F2qv$2YliZop#*G* z^2Qzh4q8$OEO}vq-EwJ`&+BQ|?5m3?(r&+bSzU(rsx)T>Zof?!kCHqY?5aYx5Xlq3 z%dy3+3bkk)kLIbmVG=D5$VJ(#Lq7}z;~T&$)o%K5CxL^@7w{f@_tIR^4n4f{ggpVf zxlqZOEH*G~JNPspkcmey;KRXBKl$dfV~2e7+Fa#6Rn0 zeUg=0G{0OdrbnFyLl2K2rqGg04^$1$C(0#55N|-bJC`OA+wk(Wtj}RxghQ@*K>LzX z4f3m%`p|y;*0w=T@lp?7GC|!CEs-dQwPVA(QtWwu`96YQz{E4S7SHpWJJ>bNZMp9s zitC&zzDduji-vR`6vM4xaFSh2E%x8%K8dKv1)!TQX`Zv{#k`{3Vx03y2jhnuFCm*& zvxj}Ccaey&RH&1fR_psBFQQ;0OZHz4dvxzQPo7#Iy@>qV7K`l(BLa+Nzf8`-O>>{t ziNO>Kh@#I3^PpEEbg6dZUYhH52lPIVd2pJFvf_tz#L~ZPCL`bz?TdexK1A@2RguFuZN?NL+cXU)qb7L7)?qE5OwO)%hphPYFU(S=R zqk6s82mJ)JFbPcpl$lDh{m1wp#tmG-AA>Y#-s8`yTD|Ve$F?`UNNRhxQ-Rog86;AZ za?Ddi^vPQ+?!q&fyu?_(@4p5aDO(rU*sO>=-F)vsn*Np9t852%-uB;u>c2lje6hdy z_$OqPBw>&lbE#y^-HsemAMX*jZlijhzHU-5??4fG{mA%lo_@TlGHU&HTLod&>(;D3 zsP5I`5|fI{h13e1BxKMtB6{r@DaH(BkphBaxt(3>&V6Z!t*-8QzZI8qEZsJGJtuzQ zk<{j%Q7LH;>W;*i7}YVFuU3h2%PR2Ma~E{Oux2^HDI;*8RpuIf4-Y6 zFL<&D@&xCxjZMtJD>Q*)vgi=>%B3-SJT5J(EE5w-g%o(M9?JBTEC?QjsQ10!N!p>% zzMjN!MFf9JQKVJ>Pb23Q&W7Xl@eZXaEw$CAX6-$bwpPp(RX;N=ZB_kHHA7>xXpJVQ ziV?e{B53TCCPs>)R*l-DMeGqHR{TBh&HMas-sinN7w6oZ=UklU`}s5$D#eL~d;$?V z)dtNJto`QLWK$$l<^#nucD@V>8!iiE=A|lRaPL@1Uw$@p7yiATki@(5Uq51xn!Tim$c{-R`xJW1Kg=)0QpTd>ul|3O2}74thd zV@k21LY!DHC3%*dMEobpGb-gCdyklmofc}y(#f{bv(q8&A4)`M%wM*I5Uy^qJ6xs+ zIinPvug%~R^I|^OXQ=<<=qZL2_GZfk-78nvT~MMW3c6ba_pxIGTZ1H*XqY)da6Di_ zd&DRFxF6(FcNjIj^wGF0wG)ODXmw5)rSjyDstp4}HBCe9Kg%O;P52+AQ4;M6!y|-s~m8;g%I)VG0^)s)ihvc~TEG$;;A@mCx z-Zw-MNDe+DgXWnTXGSKBYX5js@zv5zokV|tC7{L-lF%#1JF$=367nLPY`E<;o8U%w ze(O^;abY`LqN!S?yQSnht383dZ44*$rE&I&j@a<)jyf3V6mlBFkqtey{h z^?tv*l^^>(Q*gupHqHQUTnW}+!a)D%+mSjBvPN)u@2!oHd7KL2GR2=zr@Ol-b%xQa z6f2AS{Pt6zVgAtotM;b4VmxgJ^`h;G?_wWE?^F7mxI^e66-KFD$$-)DjWga6hRLk{ zgG)Tgo$(DmG@b7=asm=X+Kv7-DS7*322qKd5?5H23G~FKl7o31t~Ap&PecTd&FcMJ zn*RY1b4er6SbMP&y3lA(;<28m*!C86=zUw)GPlw}s=97-a|^(4Fr%`YTi&3yHnTww z-CpS{^V1E}I*(DnP-@XpLCmC-xg#p);B|xjB(?QOqueD1Q6>pNG~Sp^&Z?L%Z{H9% zoJDKWuN(MZb9*=}z{pfg{Z>KDWmY(K;TDSErk3kw_P^)QisO_euWL;vTZh{00~tyM zkK%aic0d*mQi3L_Uv=!28fyz$-q*=M!UV=fWPaHoj2EJBMp%GbxRmB zMdp_K*m;u|6Vx6taBLE|q~!?59r)#?8HZu_rc9DrVWQb8ZZ@Bv_|}etOaYV>SOEO^ zN`2@Gw|oxHbF2tQKMpV+v5o=6E(&(BAxuCVm{Z~RWg}%Tg=0)P{etPg~)j_k#)X$3}(2Hf< zKQ77g$Vjz`8VxL1-d`DEQ;*bsJQjt6(-eU8h6-}nX|$;+)^Ykf<|SvBY$fqEkSG#l zUOm>4`OrC_Cqa8XB{(@_i*UMOiQ|=V*j_c)T53!<7&vPWA9)q^M-iqE25n<%5Ru@v zrl!Gva^b|X_4RRI^pI=dv46CRg^tkjEN|U@6u~%BZ_hG~1S1YUEZ`0m+ zZC~27K*-+`y?~W{hwy2aYL!-k4(q)jNnYWS92KNuk=p#xaN$!hX-z$2M%_IRY@w(k zMBIPcvIsK#f>uWYyG<9NEuK8|3q*Z#35pm4V-hq|)oZ)%|v;hK`y~HFpH*EK5M<~wC|jV4WE=ulj+ z^9jCAu1AyPzZQZLkg&F%l{Q1N)Zu$VzeZ-hRs`dhrP^}9S0aC-0G-8JcTxbf#+0Wa5MTz$d$FSLlPZ@!zkgIB@>Gb2-MGp8!eWMQ#4NPjQyA6@SR}1tZ6Vs;KRM&K zEwis~9+8f6f`d02_EuGS#-3yuvwzgO%eaP6F4iCGx$YcQSDDkZ>>_PmD7%QoFsFzbwByCV1NPznF#iC!kdlZ71(q)+C|a5CR%=&TV>#6f%= zalf;q7N{~*&gNS`$0e+VYy9*3dsVSMsD@EGEbGU83OQbm%P`tm-|f$RnQ@hc-#L%( z)Z)50M|#-bNMEl>v`FoPusCjql)d<2YXfNsoRhIdrO6sue{mDrdgj|Rox9g)A8{C1 zk#)l!D+6JRtRt?-pHdmtwQWlAx8$ltN=>jeHpa-?7TN^iLX?UMY_5Jz>PTG7cHC5o z&w9m~5c7@}Z^nQRRWlqkl#Cj9St$)pdskGbp5*Tp*aSsKY-Q2cig>ZZJ!#Lcese2)8Te5bDsIydsddf;g=&uH1C1^F{BwpkLt-Auf zwFJ<)XvdpQk?i>3jR|Vo~rJ ze{(3k0X(U4=VFr;-a23ZFLd`#IJdSW)9hziS6P;j7Y3iy)u_T4Mfflhg+4}~hR`qZ zOpLEapM9~(pvJZ8-t{g9>mm91BPZ-dn*yxt-FHe#A7K6q$3q76FH8uX1GJaoH(E+o z7G{bjqWeDMBJlpVbvwW>6;IiIhQpWm=wIRT9Ai>eEuU*sKc_#Io(0U``XD+YPrv<= zf%;cLq~w!Vju;16f{X8KwvxZg-t2WuAn2_Tn!`;EE$xOE63vf=-0fC%B)GqLp)*a0 zQ01?DGZoRM>~Xx<^1+HgA6i5ofvMH}%-hvl2m3iETUhLN9!y(98JJi9SXPnsvTQ5_ zU>X=MDqH^vBGO?Cp$U-9126QgwislEB}vOG#jPZSU%>855Q-)@`~N^IkJ6-P|B*9WWi?d?(svH(}EK!k}# zD$e8GB_??~Gyx^x*ZbN4H3@HvQ6%AEZfCq_gm4O0#5Oo z-trU&QhQ<8Lw{wpJrgs)_PC-26FxuKyNjd58zLihgwcv$iO&LEhL;ZuCVy5Ij4;Qh z6Vm54oDw4(tDU|@Emdi-^k$O2s_S_fC~Nr}Jg9D1rrH>$I1F%N^-{ARjPeP~>J}Q* z0ULdK#t`PJ9zCwXo39T_c@!KQk16g5Vb7eq21zneyIsCnPv_orC9HQ}3MVp9*pk$O!ld0002_yQHWR002S%w=lxN{DrVLGI;|4NVs4T5ryv}BBToT zHYQ+85C9~BO+;?9EBRD85p1P7AEd{jR zu&S`71>kTVd7g#_6#Wv8n2OrMFCezcIwi#I(|VT6dIp=mcdNri=EvCAn@l{wu9YTG z2&N1mNF^YFyLIs^B3#}e?i~Q904vplYF4|n44k~YM7@j#J#yX#?*+GhTNHSCTg)5Y zGO33U>?5PLt6NTukq7#g*F*Oa0^o?Is=f+HknX$0BnByv0z~UllnW}z_9GwP zoxyZQR1TXCnUi&=-lq#e_%_2?rv^ud^lmv_bQXjoW;07*Vz9DL(U>ZMnclIvU$ zn~jMNqX~ZvB9_=@+V?2U^F3twfN*a5n!(ls06-Ha$us}>mi$E|f%uGTaDhIT68kwn zw+F!ZE{z^5zvt)}I)hH6|SymUt|xZSTgC z8?#61@}pP+Ci+QWMEdR%(F0l-`9RtoS+_LyvzVk8^ZeN9m7O8BWs+zB?T_e;xe@@F z9(!m!3K4H{aO?R|io<}AQNUe>4Msg#eL%x9mz2VDjAXTU{4zRbg3Xzp=c_$$6CErg z^AWFs{EUXsmeSi&4JkFRR2lM+5ZomUzc0LK4V9l8De~nC>@m!y063h)0D?>sLdSsL z1TQ)?vEg!y4Sm46D_vsfS!mqw@^H;?e1YwxxJ~w3 zDZdb&Fet(yoM;JSEDRZ^6V137U?xgPU9@~EVLuj{Ya~Ykr zWPS>@5SBSqWe}-BWMFhq<6eQxL$Uue@lvG@eb6I3#!NcI&2@)Ai6iMPDf=VeWg!Ka zyXzG|ca$Up9o>xd+l9bT=gnl) z9N1F|hp*hVtll_)JuvBLjmU>gNiRKF^6h30ALZRK$93iz7i9Tfukh;E~cwN|ID)|r!P*L*I*fGhf z0%r8^1QA+FtItH_nG{a3&ypm=bw8}?IF_R`1oz`_euH)ccI$T;uN|&KBm5)$BI;#Q zkR(iU$GB5FS&>;6LC-(Lzl32@gwcHtixbxrqA4cK)hXc3=}1gWoKJL$%Oo3(*JadZ z^pLr)J2hU8R{2~;GoQ{KPMcR%cwWq@c%ig0W5zC$2Fu`=B%&={UZk7Dm**9eKdLzl zJz}?;^jmdge#Gf_XIygZ*O-TdY>I4ZeJUT}_qJDG{|NtF|7M`HVX1IoA2`T5h)k?4 zFVQH)sL1H&w$LxSFs1}asbHxtDZ)ZvA)gdZg8LD!ZuGgV>8$$9!wl2ROTy0)@e#if z@W`)`ki^wQSk(j-OI0Hk>=Ko-481weJ>GM5%Ke zN1ew%R8dr`%wvxg=e5hS=TgkO%#X|o=8orx%XW^7j@jl8$}beUOZb^J-Reev-0$Z7 z9-`iu737fNAZN!0pH7?2;?B&?+%968Szyki91F*<~!XuMIZCeelEM|H$%-@XHq}>%|UG3wQ_?53UU^M>;{$$1TN&#^1x6$K_)#!fPim#Z$-IU?)ra zmR68%`SpldO!iDhS(Z+=Iz89q-h{XQ%p_A8PC29KvRFm-h_g7&Bkdq*AoNdyYJ^e_pa`Jz&kjrph7-Xr%AXA=vdMTS zog+;k(ZYf01NL(U^C5jjm_+!ng0T~Sj2OY2B(EUHmS_;4p*RpHjv$P>4%5PM5?J}B zh53h&f`pB(hJGjjFeT6nUWCod)H-YV>!`KbR>f+4 zqzO}s7bxmEBZA9xe`FFg&KD~w86nG?@|cP>SZ0L$8JfyU8vln!eRGYzJ@2>lZ*My4 z)-(@pbr$yE>u}7)gh-mV((_VKDI~9r9`uEimf*@n!^4r`(aWp^n-N=-NgNvnoBU1U zC|JOVVI=7eT?Jxowb>Da>W(&@=Z40IX`&1*hS zepm@uM|9qk&0|dCKFzGoAQ3;4-fRE$>{p*MnglvbZ0Blw%|-`~uC(ShugLMVN{cRR zyRa&3ZR}($A4bDuoww!VgX?UGMXG8meba91A@^;GF#9Svb~Yd4N5FJ)M+w9drF$`K-NY^QIH4Wmi5^etpOpX=TyWxiPW4-q>$E z6q}jG6Yk=@@@v(}wE5$Fg|@$}j&Fdk)g$XHa(VSRe1~cNW$pp%;-xOTyZb zV~JacV+&LN2ha z{VL6KX`WVrv*DS6uDPzfm#5dkQO@i*G9z-acm1Q4PrjV-9$q5b$%N7bb_Nk&vWs=e z_bGN;{yk5do3;HHoNdN6%hc%^ZGMtoBp))~m3a#94Ks>IL2UZnagD zMdxFe_6_;Q)#gP#mlnN^t-0wbuF4zBWRJxs0{*Xze~>!d&eRSoCswDMFB~V2&s+Oj zZ?>%m|13V(Uqr6yzx!V19Om}**Gb?CiW@&d-iB|iYNFH|MjldZ2z#t z_w$eMQ9#@ZGkaEm%{`=Gc!(*iYjpnb_Y3_vf60pobl}Ip3{P6Y5@gK=r0?M#Ah3sR zCe*2bTy#&mk%IJip5fi5#Gk%tpdEQq^1J^fMWQsK$Hj+g8={_ z6j(*WQA1XS+t|j6(eQ_j5s1;%%Jwfc0Kn_Y{kLibax^4$wX(E!;CAIB{|^QC-}*l= z6FKRBNE|Kr$TegYNJVVyL8Kgv?2OFh{0O9^q`dY&Ot_Uq#s3%k-#0#TGe<{TZYCxd z7Z*ksHbxtJQzjNJE-of!Rwh7P;{I6#HZ6MP>3=<0@Gt>VUnOa;zc@Aio0Iv!IsXguU!4Ce z;g+`tgZ?_{pDXxTc$xk$*#DyEW%}o*|MJ`a1m!=_zfs{w;AQ&X5#~n_d8A4P00aTw zMTJycAx=BN=^zQGCcJ};v3Q4tf;g2pBn<;*7^Eg9mxqw|weE5sMW2iFhwGQNKe#nQ zGI7vmg7qqe_zwIx9vkwf-`u3of$YANtYz1yODq){EET5J8fZMuHhy$C=XubKTAO*$ z{ICpDAB2~#z1w1lIt@Kyhy~D$fDrfio@O$5C8XX=i`Lr9DSVyMRmOnlYNyU{_x zakG1PvhhRgc_w@?oUJhd0e_5-8r15+6zcDX(=;l@z^e8fz%{Y*e*y6`gQ8WuY@V>7 zumgpx_?h0G=-sGi!I}|+gpVK_8KxnaE0EMdHf5vG6%e8*!kb zvNG}g+5O1IGU0vSM6+V+qB>EC#2cpIqSrVAO^}|q3=f_aIrs~Vo&kEj0V zM#q@srGyf(^gjugDr$c_JMWfF$^G&nPLus)(63bL_xt9OLxyb?6TSq z7`|LGHYq1I%a54&Zx|`1>fd zL)lkG3otLJP;g2Hs)X?OUGS}0e0QK z^Y8?sY`H}`T7V#?Dv`gAy7!`dEJzb68KD0_yvu~BnC*?=h4jULRMnO#AT`TFd=Rtz z=Vi7#bM{~qI_+F#tsUaFQX%AumUL5d34Gu0#jYq*fhO_wtXy1-^*jA_-?(Vme8J8K z-l=Qd$hd##I*$ruqM}A_9}AF7%)l6emfSEl8^aJEM!4008PE%Vom$JWi(F4f@nr`u$QAgm^7%b@R zc(2Z3XPULezAz)r!b`)sT8AOvPbcg88p4lCNMF8`0Jih3>F4q~yDR>4iafQ(Nfx}f z&?oIHoJINKe_db}ytpBK_W)c#fDW?#se46}s>-gtmH}QlJ@ih^%t7XB(WbiS(w4he zr{8J6NLc?3P9@GvxPs6^SMKok=^V>T9UH-)<;EtDL<|yn;!(pxta) z6d?hai*RiySjM##8AYF>!VvuKJS;$=C!}wT(DKF1e)oc@U=(wj{XHk>E`^mbR6FN0 zS7gCJ$}G%4Wxl4Ll8o+j-qZ@ri~8uoj(j3ek^wOJo@fEOk=Cb$t~q%K2DPBXKT|Xv|yc_YCLT=2ARnvraoy-K{ub z-K}imJGb0xbqyew8Qqt;S=cv|py+{||M}_D7kHX@v>djqL?>u0KuXL)sVaMsG6xet z*tai+4|Gh;49{qRKUT{mn`#m@HMI|z1!XlRUjs*tNor2=Q<0lpAU+pm`)=RgS?oO? z7qS{3w>&(?gLYQ#SXWnRR@JMMBZ&k*5ol&st(Ff+yt>S{w0Q1oZ31if ze=(wkVnX*y_*r+YRlP#h_ugnGO~DoLF;t-9*~EpUm4o4@!d^FB!M; zXH2;{aUoSs%rO0Xj#z>ni;OTv#OMgvurhM^D%qgZc`iiSQ{(x82+GDq&UL?J!b@{W zfqcFO5m&m}^DrxshUQ`x0PN8C(sZrF#-sLQ*p2Cm7WGZKM<8b)N}IVJVxtj1Ry&A1W6xUb@0u7Q#DXW^Vh7bV!fHQ`kC>olk3S_~u z?s{D-kb2YTim`k`?|kvd<#YTa2~B_J89hvdnW0I$ug4h??)TPFl8X=DcMGR3Ks#vE zt1Rp9x6hugt~uOt!As=Gaaz__sRLkUoRlz`3XD2WoUUvhIo;RZ+r3jCc^q#ZIh@GE z{XMU_=AT368P&vY+E`_)%lwuO$qw01&tOkQG6yfZ;Tk}h>C6HVIF}-dQfmo8 znwgoEc=pGt$ZjArBeAk_oE3z?waAH81YOD(kdfJ5#fQ7L>EpUsM@*5DpbGhcLXI&&|CWE*Ey4!D;umyIgf@i=qt`!aNQ;y7Z(x92TIVaz#@(x>17;o-`Q!l&S z1jnad9*RnXhG20HtlA{x(n5TNZ#b?1(nl;y%r%DVd2R@CGl4_5ON~Z~9avu! zTw!-f8duRT0Fn9Gy?q% zG9b2wW9HkuV_SO@7d_;=islPXI{?QA_Y_v0gruJc>%#^)s@^MY2Z5;bE(Y1P@8*&+QZCNXmV`E zRoB(3#<|vCs0RIq1AtUQwUL7aQTYoS1)(^3sbSxDjWeeyc>LrxR$}y7S)Z|=I-A}@ zp4DruUCD%?LJgs=;ec?xvQl?D`>u(2p|(-69o=b*{}*-(pdxyy1r7C@+jghri%RTb z;SdW-i5Y=WsW)=&;`mh2;6;aOl>VbCUgxV3&DRYY)6;mPZ5TADk2%?NGig8%l6GRS zyQo9lDGGqIkuylYhg)pcE=&}7J*-|YpKD^vMBuOD>KBY37Z%e* z1BNp_p;S7|SG21ZG#|aD-HgzHB4vLlTAj-h^X{c`ymbLnj1^qrTm8&v3STkYHV8{8 zEW%>;C3BU zE#j@vlwEdizWxE#AIJNsK7Z{}a_)Maue&-#ZeS}KW>!$w1e>CbvhFe5J-DA&$U}lf zR=p|@+}aQ~BrN`|fXvPoVt(4C#}fF(C+xK5VQ;-=v$kZyS=ZEi+JAgf?o=PyZNwRU zQ?Hfne3R3RhJa^)6C%vcNApmY;>-lF66|On*wddpob_gh%Tbw{eq_-7DERDp zufs*D14zxe|-T?$-y?(R$YZGDo(DHYi0A;n#P`TmkdS!CuLQzib4_fC$j;A8Z_)czwT@;}RoC z*KZB1Jo#PsvR6EM9-qnP~d5H_@<@zeTZN`vZl+e`Q;_3Xb+g|^Bf zl0*XC6{Q}y^b=>tEqGicM=1m^Co#h24?T+ajSiRF(K4(1&fW}JSvwXMQ=xr;5Rd zxcDm}a2@ZjJG7{G#?$9e%m%11pgQj39TipuG7SW+sf0nK;ErP`ghpyViYA)ZCixLx zrl1wIcsZ)X^?1P-EXzRoyzRM~vDKm^b8EQ=dfE$ibUfQU`u_SH0N+O;Z#Y|IM?UCR zn_LR0x_*Ox6WSK}&ybj|iSNtGJ0pSOS53Dc^LAeO5uEp3o0n=;wHi4TXUE z8ZLSfnUeBxvgn2`Iy4vDn5t1+$5>b+<>ZZwwH&zK9hD}cmZbz+%Dwr7Mvq8^E3gYW zw^hck=S&8QX`OZ82z&b5v|#&aC1pg}`(!tYA`x!!?GT*UiHrzPOJL#6WP3WqH|M1; zM?+@w%oz3|p(MHth-`D73+z?{tXLenQ$Fa|1k$KUO(+z*3{13Zf0E&=oGM+*>FuZy z{a^r6bd;91uQJ;rbiW=$S@+h0osVEoz=XH-tDLbhOv0_V-HLudqx39_ZiYBGz}{Cb?(?^?^x&$AV*b>9=Q22WE1Lb8aD3-?o{ zLLfUb+W{2|=p+~J5E>*4-cm9L+YS*sU~fJ)Xsup=D-gqJLy-u z4cX~R3{1r~i3dR+xqEyW>V>i-4Rfde%SRtB9 zOlRaAT?_-lawV(CX$GI_5eZ%$5jAG4oD^OswL??DtiXG~BD$<+$Aa4zTWdbJp+ydY zrPzi0=yAKwV9UFDsv*~rm7&rdXS;_GEPj-o=GvWk-K7_PEXCvA&X<%2x14LkgB#}YU%h>HE*^?sN9F7wG`h<_&{%(| zlSSb2tS9RUM;-{k)|3b*L|)l(8E?#;>GP?7@_CMDZSf*7;D)YX&LgSCAHJ;$IRg(M zWIIz@DYF&%VF(T(XEmI&bJJDoKfBzS?uajdJlnsMa8)|x#T+FV8IdSuKu?L zbZJx=#P0jy34_lst{FYOALAIddqR^V%jI!0ZtpAZ^t#3d8arWy>?sb3eRbrfHAUK- zCL3z~mMPSJoXa2^Dqw7EqV~+5ATsFhp7Cu{#dg4g6PR?dRr*~F18o=88M+?U{tJ?S z%ER>*XF!K}zCJRgmLx}*#RGm_Jg=~@dvQosK@PJ7Pnd0^dmk+OBZ<}TV-Jz0GWb}D z%UazZt0aC>(H&5po1^gQ+N=>Q^gTV1X(jlv%BnZ1ay{`$f@%;{33Ln{=I+-Cs!~TI zgdh2-LTowWDFD--w%P1PvA4o(yi(l@3{SGsc`f~@TvBe|%U*B_e-k&!Td-E4rI~zKoo`v=!Rxmr8iAC9ocYj~o zmMVMV2#_rN8}!??hWxTxxcM9a<_4fS&?Yi=#dD`a{o2dkQoy0 zVn*G{SN{7cp0BP(DkOG%yH5Cygl7uon%1ugdK{#SGxSbC4G=;g0RGE)Z5VuLuPz6Y z@)b%Erdl(pr7e;)(ep@MT-icEK5;1gD(0^P$GgVkZ)?#~8iKu5ra)(Bur4tX zT^TF|X$xeY;avXC^i&)aaVon@Oxi=dWF&`kuXX4h2NEpe)BO}7#y} zTUci1FafI98zn}7l_z8Bk;JWvoLTSAt+$Qc;ydnn5sRE7++IX0Gx_klcNzM}NTD1L zdhc3~zwSEzeR~}YYMxP^4JfcoN{2TBQ+W&ip<}MgkG(!`d4#XK5``Ui;+#%V2l%sG z02IjQSEPLQV#lau>7cTN@$@eI9W|&%Dw4V`QQqF3^YB5KhSID)0U8eKhU+^MGp=p+naEDEbNJ4%RQ<3?n;%tOB5pgK*76gihcd{&Tj-v zym3iAZ7znNc31|-9J5~)WMkZz##MrlQj1^?C81^ggo&YXGM$ifa3x%4dn_qZufC;G z76Ni7mW@ZXg@)=Z(i`6l$=2T3QRAKSQ#t)nwD7``AeQoD5v~slKwhT#mew{k=ws$| zX^U<5biNk8k>$2TR+h=X?+8E#+8cDyo@W@85SQnX`rf&N0As#>x5k17Jk-^6!MDoz z%tMEUqI!%dbBIu0B>9|6$FX1VB1GI2mMU^VYwh2D0R#+gip0&yq#^|&A|p$7hPL@~ z9drf5e>8#P13D30kY);$?Y+juN$nDu3FxjQc4}-#euHy>2@jcbyM<&oKHt54)rQWG8OOhU_*qats6xDSRh=L9zX>0Ke-kR}DM<>GJ_PoJdR?HmH2E*Bi z$Yu)^#aFzrYc=iSUzwJM+imli44UjfB=J2hgvR~!-A}TuuMZyz3m^M*pt^CinGS<> zmk^r~G*mhgc;lAr?3SsTwjwj%Jq6WJ6I`=Kt8eqE4%l;#nHx#40`H1k z?&k+w7Uq$Dp8k=?y<`V+ndG_Wx!iqnzvLX%r`YS-k*XDm_M{7FOb1%2!yP5@1*T^O70;f5|sMP=rom!*|TEdt%>~`J224y}nG|68({B zz8o@;x08d2q;?a`^=o=sottoNq`-I*4Ba2-G*oU<(+GY&x>c7gm4i=CD|rq4(9%EnX9Gnz*P#_TQ@eSziF1Yb6AT^hLgeFB$%9KWd~XJc*Ye`X~f{?e9@ZWzbn66yK&5&6}Cs;)KpIIx3vL_5pnn5B%^T=r$F5<&(y8 z-%5&hqdtn@o3Xgy0$5)~1;6KT=AV@Z36Wc+xJxIjIXQsGDK?ty@&K0w@G$EAmED|-*Zn8^59$r32Yrv+G5O{G0owJ$&6rLV&lDl#Fz_bQ z>Rdu4To)-XM$KALk24f#NFe(Wp*v1BgtS`<@x$Q)D|ZqeI&)!%6FNwgCkdD*j_wgH z@4?EAY{huB`?X-%mE2JQr-q&`9_6c}u)JU$GQBRDW|$Z(apYuLQKC{c1AT{Je+NQs zIE)~Bj>-uY9Gq>K^S3?f`_iZk!-XH3P5ehrX9@SdT6iD z`V6J~gc;US)N~R1^RWwUjrSP0mFmaRt`<9KE#`?%jq&)`3OBw&&3TW_pB3CPB9(1a zjv}SCK^7lUT+8e9urhcr@*h@iec)|n`5S~Oxn;3-=jlKgDYr)JM#?bnZnh(-(N2M0 z9G+b!)Ecc2TCvB~py^zyfr830>sr|@f%p21*Vp2VAa8-6RD>t??zV)G&ttO~Dd&;X z4cIcUIJ~rzOWd~poY0~GBPW|ge+7Ar64t%zPJiw(e6FknCd)66pWeAK-S#4TSK*Nb z^EROZH|4wiOVxg)Fam=&UXbiZ?6fp5(ChksP5nX*GRU!X^djHBN!J?(sULMz7xx1$JZGj!2W3AYv;{ z0a_Mjn)D1N+5@&2Q`e!Ufbx&wMEfx?I>kic#?ypAQu)R!C&`v8CHvZk>gr3z!G8Qk zAw|voHtR0a$PEsJ#;3vk6+m@>kPwUkZUl>SJ{O95CvjP>@A$dU2WdCo+ljf{#M==+%do2aR_m@#hMV;I*F#rCZ(*>ISpA*9Lde8Omt z!k9p$by-VAU{dK^LmdHOFLUQ>`R5-9V%$Na3PB|hDflVMoMN+Wi=L{8Y_foma$cIp zR_abpN^tt1Y@UAz(9%_kOwOcJ{m~fmWTszXL<;nU`C=uO^AZ&wOXqWGeDM@%&>d$} zla#f{=)IL-vU^OGpTfBnk6F5a(_Htq)(QwUGt>L<*eXl)q3c$ZGfeiSPDhA#6YJf~ z6t4C8V5KJtg;>7{re&dhy!bpPJKu`InPuePMUBok`)oeFRe1;Ufrt0zI;Q{;=w>ck z)UH=JNm`NcxdrRWx)Jc54{G;?{N3L>hKQPz zk1kL8sO*P47};hM8P+%pU@3Q(5(rJE*fXD{*U=VOjS%g4c15eUvdju1_xNIgmP*Vy zx|(*VzPo5>Gcy0ploBE|`%i>YCMleKy`wo#{?Rav_;sbpQ-WFC-cl0->2O99wj>7k zx+n*(@~J1*%=~FM5VgP4mrTEE#LZMw&Xg1*cSi~Na0|K%uy#r=aVf*pE#rLb;WI!( zxet%}JzDsUtpCUtb`_658tf!nP?$e56^iBAWU0v}3TZ7THH)@5_zR+X=c; zQHd0{ug0ej&l+V}d0b$F>{`{W2z5*Gp{h1FAh3EKPEY5?o;lz9Q#Upo%YI?WAu>jm6pFJdxz4HhPN$v z5VOKcRG{=BuzA-hlH{D11{}N_E#LJqrb&h)G?soLOLm8ATqC7VDUs=2b+h`nIY9$`<8DLlrWk*^@nBLC1YQ4|tlrBsDT>Ls{1f3Sw&~eL zJv1oqU%$J?R~6Qt zsNhrMH`r`F6#`h1Ru2v9kL#Dc^XT_ZOA_MCAB2e_S^l#af}yjRo{G!k*~CxVZYt1I zadR}JPGxT+m7}N?1`t*~qDWw#3bq`)M*MCfQ~!{FrO!Upt|IK8g?jiT*&?bx-E#|e zUIh00$@4?&P|NBwDN>BmF#y7ZOR-Jn8*Gkr>~6-WAt%+>WrVoFl!-@~z!6<&dcV)< zl<;XeV#hY+E}E*8>r(W^YL}q5B>eD%&}vUD*!N8ix$eEi_NnRgnXO#=-u^)6(Cjwo zC3K07$Pn%QNnHkc8xQ6JXZGZt^94)@r6%R^hutGb5ztKD&i+*7-Jb z0oOA&b)Edk#kKaJN{7MH;w;J&3oQpuoQERy(ZsjEtHOKlR%(RV(2Iq9GTz`b z-VPma@l($FhS!L zQ=dk$OIg8X_N{53fO`L*Aiq9}#NVo{-qt(EZMk84c zA{2n=yHUz%rZ+p1=Cgz}GCr`M0&i}UIl-7^$}B#e;!+FcaNW&M)rQ|wg@8;)TD8Zh zFE#{dhC()I349(hS-Wqcip6X2Qew4V{&3GMNb8v=Mp*P{iFCDe>nrq>K@JM-VA2{0 zHS;_iLyAjuziYNWWPhN*o^<|t@mb3KlzE*i%UrUbA>Fu1;AIL(Oy{T0QVhy*&%6#K zto0&GL+xW7BHp4&_J*AT8+MgayDHZB?u7{bip%Asa4nVid$w#FQ~Lc;;-0(b`>DPA zDOoT^nz0UH3|@eLfL1±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 z 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

    D;IJr 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

    B-)8k!NfBo5TmR<5S@Z@`MXoi$jC+Suo%XSn8 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 literal 0 HcmV?d00001 diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/no_video_preview.gif b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/images/no_video_preview.gif new file mode 100644 index 0000000000000000000000000000000000000000..d8ae1430bf7a360c268ea16d73fe86778a4e0681 GIT binary patch literal 2111 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�_USjz3;1IzK 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 JotR1R{{Wjm!aD!} literal 0 HcmV?d00001 diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/3dObjectControler.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/3dObjectControler.js new file mode 100644 index 0000000000..a1a3e13dd1 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/3dObjectControler.js @@ -0,0 +1,193 @@ + + +var camera, scene, renderer; +var cameraControls; +var clock = new THREE.Clock(); + +var ground = true; +var circle1, plate1; + +var object_maker = function(){ + var make_object = this; + make_object.fillScene = function() { + scene = new THREE.Scene(); + scene.fog = new THREE.Fog( 0x808080, 2000, 4000 ); + + + var ambientLight = new THREE.AmbientLight( 0x222222 ); + var light = new THREE.DirectionalLight( 0xFFFFFF, 1.0 ); + light.position.set( 200, 400, 500 ); + + var light2 = new THREE.DirectionalLight( 0xFFFFFF, 1.0 ); + light2.position.set( -500, 250, -200 ); + + scene.add(ambientLight); + scene.add(light); + scene.add(light2); + + if (ground) { + Coordinates.drawGround({size:10000}); + } + + + var robotBaseMaterial = new THREE.MeshPhongMaterial( { color: 0x6E23BB, specular: 0x6E23BB, shininess: 20 } ); + var robotForearmMaterial = new THREE.MeshPhongMaterial( { color: 0xF4C154, specular: 0xF4C154, shininess: 100 } ); + //var robotUpperArmMaterial = new THREE.MeshPhongMaterial( { color: 0x95E4FB, specular: 0x95E4FB, shininess: 100 } ); + + + circle1 = new THREE.Object3D(); + var circleLength=40; + make_object.addCircles(circle1,circleLength,robotBaseMaterial); + circle1.position.y=circleLength*2; + scene.add(circle1); + + plate1 = new THREE.Object3D(); + var plateLength=40; + make_object.addPlates(plate1,plateLength,robotForearmMaterial); + plate1.position.y=circleLength/8; + circle1.add(plate1); + + }, + + make_object.addPlates = function (part,plateLength,material){ + + var cylinder = new THREE.Mesh( + new THREE.CylinderGeometry( 5, 5, 40, 32 ), material ); + cylinder.rotation.x = 90 * Math.PI/180; + cylinder.position.x = plateLength+15; + part.add( cylinder ); + cylinder = new THREE.Mesh( + new THREE.CylinderGeometry( 5, 5, 40, 32 ), material ); + cylinder.rotation.x = 90 * Math.PI/180; + cylinder.rotation.z = 90 * Math.PI/180; + cylinder.position.x = plateLength+15; + part.add(cylinder); + + cylinder = new THREE.Mesh( + new THREE.CylinderGeometry( 5, 5, 40, 32 ), material ); + cylinder.rotation.x = 90 * Math.PI/180; + cylinder.position.x = -plateLength-15; + part.add( cylinder ); + cylinder = new THREE.Mesh( + new THREE.CylinderGeometry( 5, 5, 40, 32 ), material ); + cylinder.rotation.x = 90 * Math.PI/180; + cylinder.rotation.z = 90 * Math.PI/180; + cylinder.position.x = -plateLength-15; + part.add( cylinder ); + + cylinder = new THREE.Mesh( + new THREE.CylinderGeometry( 5, 5, 40, 32 ), material ); + cylinder.rotation.x = 90 * Math.PI/180; + cylinder.position.z = -plateLength-15; + part.add( cylinder ); + cylinder = new THREE.Mesh( + new THREE.CylinderGeometry( 5, 5, 40, 32 ), material ); + cylinder.rotation.x = 90 * Math.PI/180; + cylinder.rotation.z = 90 * Math.PI/180; + cylinder.position.z = -plateLength-15; + part.add( cylinder ); + // + cylinder = new THREE.Mesh( + new THREE.CylinderGeometry( 5, 5, 40, 32 ), material ); + cylinder.rotation.x = 90 * Math.PI/180; + cylinder.position.z = plateLength+15; + part.add( cylinder ); + cylinder = new THREE.Mesh( + new THREE.CylinderGeometry( 5, 5, 40, 32 ), material ); + cylinder.rotation.x = 90 * Math.PI/180; + cylinder.rotation.z = 90 * Math.PI/180; + cylinder.position.z = plateLength+15; + part.add( cylinder ); + + }, + + make_object.addCircles = function (part,circleLength,material){ + var circle = new THREE.Mesh( + new THREE.TorusGeometry(40,10,40,20,6.3), material ); + circle.position.x = circleLength+10; + circle.rotation.x= 90 * Math.PI/180; + part.add(circle ); + circle = new THREE.Mesh( + new THREE.TorusGeometry(40,10,40,20,6.3), material ); + circle.position.x = -circleLength-10; + circle.rotation.x= 90 * Math.PI/180; + part.add(circle ); + circle = new THREE.Mesh( + new THREE.TorusGeometry(40,10,40,20,6.3), material ); + circle.position.z = -circleLength-10; + circle.rotation.x= 90 * Math.PI/180; + part.add(circle ); + circle = new THREE.Mesh( + new THREE.TorusGeometry(40,10,40,20,6.3), material ); + circle.position.z = circleLength+10; + circle.rotation.x= 90 * Math.PI/180; + part.add(circle ); + }, + + make_object.init = function(holder, object_width, object_height) { + //var canvasWidth = 325; + //var canvasHeight = 220; + var canvasRatio = 1; + renderer = new THREE.WebGLRenderer( { antialias: true } ); + renderer.gammaInput = true; + renderer.gammaOutput = true; + renderer.setSize(object_width, object_height); + renderer.setClearColorHex( 0xAAAAAA, 1.0 ); + + $(holder).append(renderer.domElement); + camera = new THREE.PerspectiveCamera( 30, canvasRatio, 1, 10000 ); + camera.position.set( -510, 240, 100 ); + cameraControls = new THREE.OrbitAndPanControls(camera, renderer.domElement); + cameraControls.target.set(0,100,0); + make_object.fillScene(); + + }, + make_object.animate =function () { + window.requestAnimationFrame(make_object.animate); + make_object.render(); + }, + make_object.render = function () { + var delta = clock.getDelta(); + cameraControls.update(delta); + circle1.rotation.z = config_api.effectController.uz; + circle1.rotation.y = config_api.effectController.uy; // yaw + circle1.rotation.x = config_api.effectController.ux; // roll + circle1.position.z = config_api.effectController.fz; + circle1.position.x = config_api.effectController.fx; + renderer.render(scene, camera); + }, + make_object.get_heading_attitude_bank = function(data){ + /*return {"heading": Math.atan2(2*data.qy*data.qw-2*data.qx*data.qz , 1 - 2*data.qy*data.qy - 2*data.qz*data.qz), + "attitude": Math.asin(2*data.qx*data.qy + 2*data.qz*data.qw), + "bank" : Math.atan2(2*data.qx*data.qw-2*data.qy*data.qz, 1 - 2*data.qx*data.qx - 2*data.qz*data.qz) + };*/ + if(data.length<4){ + return {"heading": data[0],"attitude": data[1], "bank":data[2]}; + }else{ + + var heading = Math.atan2(2*data[1]*data[3]-2*data[0]*data[1] , 1 - 2*data[1]*data[1] - 2*data[2]*data[2]); + var bank = Math.atan2(2*data[0]*data[3]-2*data[1]*data[2], 1 - 2*data[0]*data[0] - 2*data[2]*data[2]); + var attitude = Math.asin(2*data[0]*data[1] + 2*data[2]*data[3]); + + return {"heading": isNaN(heading) ? 0: heading, + "bank": isNaN(bank) ? 0: bank, + "attitude": isNaN(attitude) ? 0: attitude + }; + } + }, + make_object.set_heading_attitude_bank = function(data){ + config_api.effectController.uy=data.heading; + config_api.effectController.uz=data.attitude; + config_api.effectController.ux=data.bank; + }, + make_object.set_heading = function(holder, heading){ + $(holder).rotate((180/Math.PI)*heading); + }, + make_object.set_bank = function(holder, bank){ + $(holder).rotate((180/Math.PI)*bank); + } + + +}; + + diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/Coordinates.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/Coordinates.js new file mode 100644 index 0000000000..42be3e6a1b --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/Coordinates.js @@ -0,0 +1,148 @@ +/*global THREE, scene*/ +var Coordinates = { + drawGrid:function(params) { + params = params || {}; + var size = params.size !== undefined ? params.size:100; + var scale = params.scale !== undefined ? params.scale:0.1; + var orientation = params.orientation !== undefined ? params.orientation:"x"; + var grid = new THREE.Mesh( + new THREE.PlaneGeometry(size, size, size * scale, size * scale), + new THREE.MeshBasicMaterial({ color: 0x555555, wireframe: true }) + ); + // Yes, these are poorly labeled! It would be a mess to fix. + // What's really going on here: + // "x" means "rotate 90 degrees around x", etc. + // So "x" really means "show a grid with a normal of Y" + // "y" means "show a grid with a normal of X" + // "z" means (logically enough) "show a grid with a normal of Z" + if (orientation === "x") { + grid.rotation.x = - Math.PI / 2; + } else if (orientation === "y") { + grid.rotation.y = - Math.PI / 2; + } else if (orientation === "z") { + grid.rotation.z = - Math.PI / 2; + } + + scene.add(grid); + }, + drawGround:function(params) { + params = params || {}; + var size = params.size !== undefined ? params.size:100; + var color = params.color !== undefined ? params.color:0xFFFFFF; + var ground = new THREE.Mesh( + new THREE.PlaneGeometry(size, size), + // When we use a ground plane we use directional lights, so illuminating + // just the corners is sufficient. + // Use MeshPhongMaterial if you want to capture per-pixel lighting: + // new THREE.MeshPhongMaterial({ color: color, specular: 0x000000, + new THREE.MeshLambertMaterial({ color: color, + // polygonOffset moves the plane back from the eye a bit, so that the lines on top of + // the grid do not have z-fighting with the grid: + // Factor == 1 moves it back relative to the slope (more on-edge means move back farther) + // Units == 4 is a fixed amount to move back, and 4 is usually a good value + polygonOffset: true, polygonOffsetFactor: 1.0, polygonOffsetUnits: 4.0 + })); + ground.rotation.x = - Math.PI / 2; + scene.add(ground); + }, + drawAxes:function(params) { + // x = red, y = green, z = blue (RGB = xyz) + params = params || {}; + var axisRadius = params.axisRadius !== undefined ? params.axisRadius:0.04; + var axisLength = params.axisLength !== undefined ? params.axisLength:11; + var axisTess = params.axisTess !== undefined ? params.axisTess:48; + var axisOrientation = params.axisOrientation !== undefined ? params.axisOrientation:"x"; + + var axisMaterial = new THREE.MeshLambertMaterial({ color: 0x000000, side: THREE.DoubleSide }); + var axis = new THREE.Mesh( + new THREE.CylinderGeometry(axisRadius, axisRadius, axisLength, axisTess, 1, true), + axisMaterial + ); + if (axisOrientation === "x") { + axis.rotation.z = - Math.PI / 2; + axis.position.x = axisLength/2-1; + } else if (axisOrientation === "y") { + axis.position.y = axisLength/2-1; + } + + scene.add( axis ); + + var arrow = new THREE.Mesh( + new THREE.CylinderGeometry(0, 4*axisRadius, 8*axisRadius, axisTess, 1, true), + axisMaterial + ); + if (axisOrientation === "x") { + arrow.rotation.z = - Math.PI / 2; + arrow.position.x = axisLength - 1 + axisRadius*4/2; + } else if (axisOrientation === "y") { + arrow.position.y = axisLength - 1 + axisRadius*4/2; + } + + scene.add( arrow ); + + }, + drawAllAxes:function(params) { + params = params || {}; + var axisRadius = params.axisRadius !== undefined ? params.axisRadius:0.04; + var axisLength = params.axisLength !== undefined ? params.axisLength:11; + var axisTess = params.axisTess !== undefined ? params.axisTess:48; + + var axisXMaterial = new THREE.MeshLambertMaterial({ color: 0xFF0000 }); + var axisYMaterial = new THREE.MeshLambertMaterial({ color: 0x00FF00 }); + var axisZMaterial = new THREE.MeshLambertMaterial({ color: 0x0000FF }); + axisXMaterial.side = THREE.DoubleSide; + axisYMaterial.side = THREE.DoubleSide; + axisZMaterial.side = THREE.DoubleSide; + var axisX = new THREE.Mesh( + new THREE.CylinderGeometry(axisRadius, axisRadius, axisLength, axisTess, 1, true), + axisXMaterial + ); + var axisY = new THREE.Mesh( + new THREE.CylinderGeometry(axisRadius, axisRadius, axisLength, axisTess, 1, true), + axisYMaterial + ); + var axisZ = new THREE.Mesh( + new THREE.CylinderGeometry(axisRadius, axisRadius, axisLength, axisTess, 1, true), + axisZMaterial + ); + axisX.rotation.z = - Math.PI / 2; + axisX.position.x = axisLength/2-1; + + axisY.position.y = axisLength/2-1; + + axisZ.rotation.y = - Math.PI / 2; + axisZ.rotation.z = - Math.PI / 2; + axisZ.position.z = axisLength/2-1; + + scene.add( axisX ); + scene.add( axisY ); + scene.add( axisZ ); + + var arrowX = new THREE.Mesh( + new THREE.CylinderGeometry(0, 4*axisRadius, 4*axisRadius, axisTess, 1, true), + axisXMaterial + ); + var arrowY = new THREE.Mesh( + new THREE.CylinderGeometry(0, 4*axisRadius, 4*axisRadius, axisTess, 1, true), + axisYMaterial + ); + var arrowZ = new THREE.Mesh( + new THREE.CylinderGeometry(0, 4*axisRadius, 4*axisRadius, axisTess, 1, true), + axisZMaterial + ); + arrowX.rotation.z = - Math.PI / 2; + arrowX.position.x = axisLength - 1 + axisRadius*4/2; + + arrowY.position.y = axisLength - 1 + axisRadius*4/2; + + arrowZ.rotation.z = - Math.PI / 2; + arrowZ.rotation.y = - Math.PI / 2; + arrowZ.position.z = axisLength - 1 + axisRadius*4/2; + + scene.add( arrowX ); + scene.add( arrowY ); + scene.add( arrowZ ); + + } + +}; \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/OrbitAndPanControls.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/OrbitAndPanControls.js new file mode 100644 index 0000000000..41de2a8136 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/OrbitAndPanControls.js @@ -0,0 +1,531 @@ +/** + * @author qiao / https://github.com/qiao + * @author mrdoob / http://mrdoob.com + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author erich666 / http://erichaines.com + */ +/*global THREE, console */ + +THREE.OrbitAndPanControls = function ( object, domElement ) { + + THREE.EventDispatcher.call( this ); + + this.enabled = true; + + this.object = object; + this.domElement = ( domElement !== undefined ) ? domElement : document; + + // API + + this.enabled = true; + + this.target = new THREE.Vector3(); + // center is old, deprecated; use "target" instead + this.center = this.target; + + // This option actually enables dollying in and out + this.noZoom = false; + this.zoomSpeed = 1.0; + + this.noRotate = false; + this.rotateSpeed = 1.0; + + this.noPan = false; + + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI; // radians + + this.minDistance = 0; + this.maxDistance = Infinity; + + this.noKeys = false; + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + + // internals + + var scope = this; + + var EPS = 0.000001; + + var rotateStart = new THREE.Vector2(); + var rotateEnd = new THREE.Vector2(); + var rotateDelta = new THREE.Vector2(); + + var panStart = new THREE.Vector2(); + var panEnd = new THREE.Vector2(); + var panDelta = new THREE.Vector2(); + + var dollyStart = new THREE.Vector2(); + var dollyEnd = new THREE.Vector2(); + var dollyDelta = new THREE.Vector2(); + + var phiDelta = 0; + var thetaDelta = 0; + var scale = 1; + var pan = new THREE.Vector3(); + + var lastPosition = new THREE.Vector3(); + + var STATE = { NONE : -1, ROTATE : 0, DOLLY : 1, PAN : 2, TOUCH_ROTATE : 3, TOUCH_DOLLY : 4, TOUCH_PAN : 5 }; + var state = STATE.NONE; + + // events + + var changeEvent = { type: 'change' }; + + + this.rotateLeft = function ( angle ) { + + if ( angle === undefined ) { + + angle = getAutoRotationAngle(); + + } + + thetaDelta -= angle; + + }; + + this.rotateUp = function ( angle ) { + + if ( angle === undefined ) { + + angle = getAutoRotationAngle(); + + } + + phiDelta -= angle; + + }; + + // pass in distance in world space to move left + this.panLeft = function ( distance ) { + + var panOffset = new THREE.Vector3(); + var te = this.object.matrix.elements; + // get X column of matrix + panOffset.set( te[0], te[1], te[2] ); + panOffset.multiplyScalar(-distance); + + pan.add( panOffset ); + + }; + + // pass in distance in world space to move up + this.panUp = function ( distance ) { + + var panOffset = new THREE.Vector3(); + var te = this.object.matrix.elements; + // get Y column of matrix + panOffset.set( te[4], te[5], te[6] ); + panOffset.multiplyScalar(distance); + + pan.add( panOffset ); + }; + + // main entry point; pass in Vector2 of change desired in pixel space, + // right and down are positive + this.pan = function ( delta ) { + + if ( scope.object.fov !== undefined ) + { + // perspective + var position = scope.object.position; + var offset = position.clone().sub( scope.target ); + var targetDistance = offset.length(); + + // half of the fov is center to top of screen + targetDistance *= Math.tan( (scope.object.fov/2) * Math.PI / 180.0 ); + // we actually don't use screenWidth, since perspective camera is fixed to screen height + scope.panLeft( 2 * delta.x * targetDistance / scope.domElement.height ); + scope.panUp( 2 * delta.y * targetDistance / scope.domElement.height ); + } + else if ( scope.object.top !== undefined ) + { + // orthographic + scope.panLeft( delta.x * (scope.object.right - scope.object.left) / scope.domElement.width ); + scope.panUp( delta.y * (scope.object.top - scope.object.bottom) / scope.domElement.height ); + } + else + { + // camera neither orthographic or perspective - warn user + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' ); + } + }; + + this.dollyIn = function ( dollyScale ) { + + if ( dollyScale === undefined ) { + + dollyScale = getZoomScale(); + + } + + scale /= dollyScale; + + }; + + this.dollyOut = function ( dollyScale ) { + + if ( dollyScale === undefined ) { + + dollyScale = getZoomScale(); + + } + + scale *= dollyScale; + + }; + + this.update = function () { + + var position = this.object.position; + var offset = position.clone().sub( this.target ); + + // angle from z-axis around y-axis + + var theta = Math.atan2( offset.x, offset.z ); + + // angle from y-axis + + var phi = Math.atan2( Math.sqrt( offset.x * offset.x + offset.z * offset.z ), offset.y ); + + if ( this.autoRotate ) { + + this.rotateLeft( getAutoRotationAngle() ); + + } + + theta += thetaDelta; + phi += phiDelta; + + // restrict phi to be between desired limits + phi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, phi ) ); + + // restrict phi to be betwee EPS and PI-EPS + phi = Math.max( EPS, Math.min( Math.PI - EPS, phi ) ); + + var radius = offset.length() * scale; + + // restrict radius to be between desired limits + radius = Math.max( this.minDistance, Math.min( this.maxDistance, radius ) ); + + // move target to panned location + this.target.add( pan ); + + offset.x = radius * Math.sin( phi ) * Math.sin( theta ); + offset.y = radius * Math.cos( phi ); + offset.z = radius * Math.sin( phi ) * Math.cos( theta ); + + position.copy( this.target ).add( offset ); + + this.object.lookAt( this.target ); + + thetaDelta = 0; + phiDelta = 0; + scale = 1; + pan.set(0,0,0); + + if ( lastPosition.distanceTo( this.object.position ) > 0 ) { + + this.dispatchEvent( changeEvent ); + + lastPosition.copy( this.object.position ); + + } + + }; + + + function getAutoRotationAngle() { + + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + + } + + function getZoomScale() { + + return Math.pow( 0.95, scope.zoomSpeed ); + + } + + function onMouseDown( event ) { + + if ( scope.enabled === false ) { return; } + event.preventDefault(); + + if ( event.button === 0 ) { + if ( scope.noRotate === true ) { return; } + + state = STATE.ROTATE; + + rotateStart.set( event.clientX, event.clientY ); + + } else if ( event.button === 1 ) { + if ( scope.noZoom === true ) { return; } + + state = STATE.DOLLY; + + dollyStart.set( event.clientX, event.clientY ); + + } else if ( event.button === 2 ) { + if ( scope.noPan === true ) { return; } + + state = STATE.PAN; + + panStart.set( event.clientX, event.clientY ); + + } + + document.addEventListener( 'mousemove', onMouseMove, false ); + document.addEventListener( 'mouseup', onMouseUp, false ); + + } + + function onMouseMove( event ) { + + if ( scope.enabled === false ) { return; } + + event.preventDefault(); + + if ( state === STATE.ROTATE ) { + if ( scope.noRotate === true ) { return; } + + rotateEnd.set( event.clientX, event.clientY ); + rotateDelta.subVectors( rotateEnd, rotateStart ); + + // rotating across whole screen goes 360 degrees around + scope.rotateLeft( 2 * Math.PI * rotateDelta.x / scope.domElement.width * scope.rotateSpeed ); + // rotating up and down along whole screen attempts to go 360, but limited to 180 + scope.rotateUp( 2 * Math.PI * rotateDelta.y / scope.domElement.height * scope.rotateSpeed ); + + rotateStart.copy( rotateEnd ); + + } else if ( state === STATE.DOLLY ) { + if ( scope.noZoom === true ) { return; } + + dollyEnd.set( event.clientX, event.clientY ); + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + scope.dollyIn(); + + } else { + + scope.dollyOut(); + + } + + dollyStart.copy( dollyEnd ); + + } else if ( state === STATE.PAN ) { + if ( scope.noPan === true ) { return; } + + panEnd.set( event.clientX, event.clientY ); + panDelta.subVectors( panEnd, panStart ); + + scope.pan( panDelta ); + + panStart.copy( panEnd ); + + } + + } + + function onMouseUp( /* event */ ) { + + if ( scope.enabled === false ) { return; } + + document.removeEventListener( 'mousemove', onMouseMove, false ); + document.removeEventListener( 'mouseup', onMouseUp, false ); + + state = STATE.NONE; + + } + + function onMouseWheel( event ) { + // this is needed when the program is inside an iframe + // to prevent scrolling the whole page + event.preventDefault(); + if ( scope.enabled === false ) { return; } + if ( scope.noZoom === true ) { return; } + + var delta = 0; + + if ( event.wheelDelta ) { // WebKit / Opera / Explorer 9 + + delta = event.wheelDelta; + + } else if ( event.detail ) { // Firefox + + delta = - event.detail; + + } + + if ( delta > 0 ) { + + scope.dollyOut(); + + } else { + + scope.dollyIn(); + + } + + } + + function onKeyDown( event ) { + + if ( scope.enabled === false ) { return; } + if ( scope.noKeys === true ) { return; } + if ( scope.noPan === true ) { return; } + + // pan a pixel - I guess for precise positioning? + switch ( event.keyCode ) { + + case scope.keys.UP: + scope.pan( new THREE.Vector2( 0, 1 ) ); + break; + case scope.keys.BOTTOM: + scope.pan( new THREE.Vector2( 0, -1 ) ); + break; + case scope.keys.LEFT: + scope.pan( new THREE.Vector2( 1, 0 ) ); + break; + case scope.keys.RIGHT: + scope.pan( new THREE.Vector2( -1, 0 ) ); + break; + } + + } + + function touchstart( event ) { + + if ( scope.enabled === false ) { return; } + + switch ( event.touches.length ) { + + case 1: // one-fingered touch: rotate + if ( scope.noRotate === true ) { return; } + + state = STATE.TOUCH_ROTATE; + + rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + break; + + case 2: // two-fingered touch: dolly + if ( scope.noZoom === true ) { return; } + + state = STATE.TOUCH_DOLLY; + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + var distance = Math.sqrt( dx * dx + dy * dy ); + dollyStart.set( 0, distance ); + break; + + case 3: // three-fingered touch: pan + if ( scope.noPan === true ) { return; } + + state = STATE.TOUCH_PAN; + + panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + break; + + default: + state = STATE.NONE; + + } + } + + function touchmove( event ) { + + if ( scope.enabled === false ) { return; } + + event.preventDefault(); + event.stopPropagation(); + + switch ( event.touches.length ) { + + case 1: // one-fingered touch: rotate + if ( scope.noRotate === true ) { return; } + if ( state !== STATE.TOUCH_ROTATE ) { return; } + + rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + rotateDelta.subVectors( rotateEnd, rotateStart ); + + // rotating across whole screen goes 360 degrees around + scope.rotateLeft( 2 * Math.PI * rotateDelta.x / scope.domElement.width * scope.rotateSpeed ); + // rotating up and down along whole screen attempts to go 360, but limited to 180 + scope.rotateUp( 2 * Math.PI * rotateDelta.y / scope.domElement.height * scope.rotateSpeed ); + + rotateStart.copy( rotateEnd ); + break; + + case 2: // two-fingered touch: dolly + if ( scope.noZoom === true ) { return; } + if ( state !== STATE.TOUCH_DOLLY ) { return; } + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyEnd.set( 0, distance ); + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + scope.dollyOut(); + + } else { + + scope.dollyIn(); + + } + + dollyStart.copy( dollyEnd ); + break; + + case 3: // three-fingered touch: pan + if ( scope.noPan === true ) { return; } + if ( state !== STATE.TOUCH_PAN ) { return; } + + panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + panDelta.subVectors( panEnd, panStart ); + + scope.pan( panDelta ); + + panStart.copy( panEnd ); + break; + + default: + state = STATE.NONE; + + } + + } + + function touchend( /* event */ ) { + + if ( scope.enabled === false ) { return; } + + state = STATE.NONE; + } + + this.domElement.addEventListener( 'contextmenu', function ( event ) { event.preventDefault(); }, false ); + this.domElement.addEventListener( 'mousedown', onMouseDown, false ); + this.domElement.addEventListener( 'mousewheel', onMouseWheel, false ); + this.domElement.addEventListener( 'DOMMouseScroll', onMouseWheel, false ); // firefox + + this.domElement.addEventListener( 'keydown', onKeyDown, false ); + + this.domElement.addEventListener( 'touchstart', touchstart, false ); + this.domElement.addEventListener( 'touchend', touchend, false ); + this.domElement.addEventListener( 'touchmove', touchmove, false ); + +}; diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/progressbarControl.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/progressbarControl.js new file mode 100644 index 0000000000..56e03b57f7 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/progressbarControl.js @@ -0,0 +1,71 @@ + var xcom=0; + var ycom=0; + var zcom=0; + + + $(document).ready(function(){ + + $("#betteryprogressbar").progressbar({value:0,max:100}); + $("#progressbar").find( ".ui-progressbar-value" ).css({"background": '#' + Math.floor( Math.random()*16777215 ).toString( 16 ) }); + $( "#progressbar,#progressbar1,#progressbar2" ).progressbar({value:0,max:50 }); + $( "button" ).click(function( event ) { + // var target = $( event.target ); + if ( this.id== "colorButton" ) {$("#progressbar").find( ".ui-progressbar-value" ).css({"background": '#' + Math.floor( Math.random() * 16777215 ).toString( 16 ) });} + if ( this.id== "colorButton1" ) {$("#progressbar1").find( ".ui-progressbar-value" ).css({"background": '#' + Math.floor( Math.random() * 16777215 ).toString( 16 ) });} + if ( this.id== "colorButton2" ) {$("#progressbar2").find( ".ui-progressbar-value" ).css({"background": '#' + Math.floor( Math.random() * 16777215 ).toString( 16 ) });} + }); + var r=160; + $(function() { + $( "#slider" ).slider({min:0,max:50}); + $( "#slider1" ).slider({min:0,max:20}); + $( "#slider2" ).slider({min:0,max:50}); + }); + + $("#slider").slider({ + change: function( event, ui ) { + $("#takedata").html(parseInt($("#slider").slider( "option", "value" ),10)/$("#speed2").val()); + $("#dura").html(parseInt($("#slider").slider( "option", "value" ),10)); + } + }); + $("#slider1" ).slider({ + change: function( event, ui ) { + + $("#duru").html(parseInt($("#slider1").slider( "option", "value" ),10)); + } + }); + $("#slider2" ).slider({ + change: function( event, ui ) { + + $("#duru1").html(parseInt($("#slider2").slider( "option", "value" ),10)); + } + }); + $(function() { + $(function() { + $( "#tabs" ).tabs(); + }); + $( "#dialog" ).dialog({ + autoOpen: false, + maxWidth: 1000, + height:500, + width:1000, + maxHeight: 500, + + show: { + effect: "blind", + duration: 1000 + }, + hide: { + effect: "explode", + duration: 1000 + } + }); + $( "#opener" ).click(function() { + $( "#dialog" ).dialog( "open" ); + }); + }); + + $("#opener").button(); + + + }); + diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/three.min.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/three.min.js new file mode 100644 index 0000000000..c504d196cf --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/3dobject_controller/three.min.js @@ -0,0 +1,706 @@ +// three.js - http://github.com/mrdoob/three.js +'use strict';var THREE=THREE||{REVISION:"56"};self.console=self.console||{info:function(){},log:function(){},debug:function(){},warn:function(){},error:function(){}};self.Int32Array=self.Int32Array||Array;self.Float32Array=self.Float32Array||Array;String.prototype.trim=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")}; +THREE.extend=function(a,b){if(Object.keys)for(var c=Object.keys(b),d=0,e=c.length;d>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){console.log("DEPRECATED: Color's .setHSV() will be removed. Use .setHSL( h, s, l ) instead.");return this.setHSL(a,b*c/(1>(a=(2-b)*c)?a:2-a),a/2)},setHSL:function(a, +b,c){if(0===b)this.r=this.g=this.b=c;else{var d=function(a,b,c){0>c&&(c+=1);1c?b:c<2/3?a+6*(b-a)*(2/3-c):a},b=0.5>=c?c*(1+b):c+b-c*b,c=2*c-b;this.r=d(c,b,a+1/3);this.g=d(c,b,a);this.b=d(c,b,a-1/3)}return this},setStyle:function(a){if(/^rgb\((\d+),(\d+),(\d+)\)$/i.test(a))return a=/^rgb\((\d+),(\d+),(\d+)\)$/i.exec(a),this.r=Math.min(255,parseInt(a[1],10))/255,this.g=Math.min(255,parseInt(a[2],10))/255,this.b=Math.min(255,parseInt(a[3],10))/255,this;if(/^rgb\((\d+)\%,(\d+)\%,(\d+)\%\)$/i.test(a))return a= +/^rgb\((\d+)\%,(\d+)\%,(\d+)\%\)$/i.exec(a),this.r=Math.min(100,parseInt(a[1],10))/100,this.g=Math.min(100,parseInt(a[2],10))/100,this.b=Math.min(100,parseInt(a[3],10))/100,this;if(/^\#([0-9a-f]{6})$/i.test(a))return a=/^\#([0-9a-f]{6})$/i.exec(a),this.setHex(parseInt(a[1],16)),this;if(/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(a))return a=/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a),this.setHex(parseInt(a[1]+a[1]+a[2]+a[2]+a[3]+a[3],16)),this;if(/^(\w+)$/i.test(a))return this.setHex(THREE.ColorKeywords[a]), +this},copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},convertGammaToLinear:function(){var a=this.r,b=this.g,c=this.b;this.r=a*a;this.g=b*b;this.b=c*c;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return 255* +this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(){var a={h:0,s:0,l:0};return function(){var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var i=e-f,f=0.5>=h?i/(e+f):i/(2-e-f);switch(e){case b:g=(c-d)/i+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this.w=(i-g)/c,this.x=0.25*c,this.y=(a+e)/c,this.z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this.w=(d-h)/c,this.x=(a+e)/c,this.y=0.25*c,this.z=(g+i)/c):(c=2*Math.sqrt(1+b-c-f),this.w=(e-a)/c,this.x=(d+h)/c,this.y=(g+i)/c,this.z=0.25*c);return this},inverse:function(){this.conjugate().normalize(); +return this},conjugate:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=this.length();0===a?(this.z=this.y=this.x=0,this.w=1):(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiply:function(a,b){return void 0!==b?(console.warn("DEPRECATED: Quaternion's .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), +this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a.x,d=a.y,e=a.z,f=a.w,g=b.x,h=b.y,i=b.z,k=b.w;this.x=c*k+f*g+d*i-e*h;this.y=d*k+f*h+e*g-c*i;this.z=e*k+f*i+c*h-d*g;this.w=f*k-c*g-d*h-e*i;return this},multiplyVector3:function(a){console.warn("DEPRECATED: Quaternion's .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return a.applyQuaternion(this)},slerp:function(a,b){var c=this.x,d=this.y,e=this.z, +f=this.w,g=f*a.w+c*a.x+d*a.y+e*a.z;0>g?(this.w=-a.w,this.x=-a.x,this.y=-a.y,this.z=-a.z,g=-g):this.copy(a);if(1<=g)return this.w=f,this.x=c,this.y=d,this.z=e,this;var h=Math.acos(g),i=Math.sqrt(1-g*g);if(0.001>Math.abs(i))return this.w=0.5*(f+this.w),this.x=0.5*(c+this.x),this.y=0.5*(d+this.y),this.z=0.5*(e+this.z),this;g=Math.sin((1-b)*h)/i;h=Math.sin(b*h)/i;this.w=f*g+this.w*h;this.x=c*g+this.x*h;this.y=d*g+this.y*h;this.z=e*g+this.z*h;return this},equals:function(a){return a.x===this.x&&a.y=== +this.y&&a.z===this.z&&a.w===this.w},clone:function(){return new THREE.Quaternion(this.x,this.y,this.z,this.w)}});THREE.Quaternion.slerp=function(a,b,c,d){return c.copy(a).slerp(b,d)};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.extend(THREE.Vector2.prototype,{set:function(a,b){this.x=a;this.y=b;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!== +b)return console.warn("DEPRECATED: Vector2's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector2's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this}, +subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a):this.set(0,0);return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);return this},max:function(a){this.xb.x&&(this.x=b.x);this.yb.y&&(this.y=b.y);return this},negate:function(){return this.multiplyScalar(-1)}, +dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)* +b;this.y+=(a.y-this.y)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y},toArray:function(){return[this.x,this.y]},clone:function(){return new THREE.Vector2(this.x,this.y)}});THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +THREE.extend(THREE.Vector3.prototype,{set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+ +a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x* +b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements,e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]); +this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z,a=a.w,h=a*b+f*d-g*c,i=a*c+g*b-e*d,k=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+i*-g-k*-f;this.y=i*a+b*-f+k*-e-h*-g;this.z=k*a+b*-g+h*-f-i*-e;return this},applyEuler:function(){var a=new THREE.Quaternion;return function(b,c){var d=a.setFromEuler(b,c);this.applyQuaternion(d);return this}}(),applyAxisAngle:function(){var a= +new THREE.Quaternion;return function(b,c){var d=a.setFromAxisAngle(b,c);this.applyQuaternion(d);return this}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a,this.z/=a):this.z=this.y=this.x=0;return this},min:function(a){this.x>a.x&&(this.x= +a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);return this},max:function(a){this.xb.x&&(this.x=b.x);this.yb.y&&(this.y=b.y);this.zb.z&&(this.z=b.z);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y* +this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},cross:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), +this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){this.x=a.y*b.z-a.z*b.y;this.y=a.z*b.x-a.x*b.z;this.z=a.x*b.y-a.y*b.x;return this},projectOnVector:function(){var a=new THREE.Vector3;return function(b){a.copy(b).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a=new THREE.Vector3;return function(b){a.copy(this).projectOnVector(b);return this.sub(a)}}(), +reflect:function(){var a=new THREE.Vector3;return function(b){a.copy(this).projectOnVector(b).multiplyScalar(2);return this.subVectors(a,this)}}(),angleTo:function(a){a=this.dot(a)/(this.length()*a.length());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y,a=this.z-a.z;return b*b+c*c+a*a},getPositionFromMatrix:function(a){this.x=a.elements[12];this.y=a.elements[13];this.z=a.elements[14]; +return this},setEulerFromRotationMatrix:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.elements,e=d[0],f=d[4],g=d[8],h=d[1],i=d[5],k=d[9],l=d[2],m=d[6],d=d[10];void 0===b||"XYZ"===b?(this.y=Math.asin(c(g)),0.99999>Math.abs(g)?(this.x=Math.atan2(-k,d),this.z=Math.atan2(-f,e)):(this.x=Math.atan2(m,i),this.z=0)):"YXZ"===b?(this.x=Math.asin(-c(k)),0.99999>Math.abs(k)?(this.y=Math.atan2(g,d),this.z=Math.atan2(h,i)):(this.y=Math.atan2(-l,e),this.z=0)):"ZXY"===b?(this.x=Math.asin(c(m)), +0.99999>Math.abs(m)?(this.y=Math.atan2(-l,d),this.z=Math.atan2(-f,i)):(this.y=0,this.z=Math.atan2(h,e))):"ZYX"===b?(this.y=Math.asin(-c(l)),0.99999>Math.abs(l)?(this.x=Math.atan2(m,d),this.z=Math.atan2(h,e)):(this.x=0,this.z=Math.atan2(-f,i))):"YZX"===b?(this.z=Math.asin(c(h)),0.99999>Math.abs(h)?(this.x=Math.atan2(-k,i),this.y=Math.atan2(-l,e)):(this.x=0,this.y=Math.atan2(g,d))):"XZY"===b&&(this.z=Math.asin(-c(f)),0.99999>Math.abs(f)?(this.x=Math.atan2(m,i),this.y=Math.atan2(g,e)):(this.x=Math.atan2(-k, +d),this.y=0));return this},setEulerFromQuaternion:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.x*a.x,e=a.y*a.y,f=a.z*a.z,g=a.w*a.w;void 0===b||"XYZ"===b?(this.x=Math.atan2(2*(a.x*a.w-a.y*a.z),g-d-e+f),this.y=Math.asin(c(2*(a.x*a.z+a.y*a.w))),this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g+d-e-f)):"YXZ"===b?(this.x=Math.asin(c(2*(a.x*a.w-a.y*a.z))),this.y=Math.atan2(2*(a.x*a.z+a.y*a.w),g-d-e+f),this.z=Math.atan2(2*(a.x*a.y+a.z*a.w),g-d+e-f)):"ZXY"===b?(this.x=Math.asin(c(2*(a.x*a.w+ +a.y*a.z))),this.y=Math.atan2(2*(a.y*a.w-a.z*a.x),g-d-e+f),this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g-d+e-f)):"ZYX"===b?(this.x=Math.atan2(2*(a.x*a.w+a.z*a.y),g-d-e+f),this.y=Math.asin(c(2*(a.y*a.w-a.x*a.z))),this.z=Math.atan2(2*(a.x*a.y+a.z*a.w),g+d-e-f)):"YZX"===b?(this.x=Math.atan2(2*(a.x*a.w-a.z*a.y),g-d+e-f),this.y=Math.atan2(2*(a.y*a.w-a.x*a.z),g+d-e-f),this.z=Math.asin(c(2*(a.x*a.y+a.z*a.w)))):"XZY"===b&&(this.x=Math.atan2(2*(a.x*a.w+a.y*a.z),g-d+e-f),this.y=Math.atan2(2*(a.x*a.z+a.y*a.w),g+d- +e-f),this.z=Math.asin(c(2*(a.z*a.w-a.x*a.y))));return this},getScaleFromMatrix:function(a){var b=this.set(a.elements[0],a.elements[1],a.elements[2]).length(),c=this.set(a.elements[4],a.elements[5],a.elements[6]).length(),a=this.set(a.elements[8],a.elements[9],a.elements[10]).length();this.x=b;this.y=c;this.z=a;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},toArray:function(){return[this.x,this.y,this.z]},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}});THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}; +THREE.extend(THREE.Vector4.prototype,{set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y; +case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector4's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a, +b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector4's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b= +this.x,c=this.y,d=this.z,e=this.w,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this}, +setAxisAngleFromRotationMatrix:function(a){var b,c,d,a=a.elements,e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],i=a[9];c=a[2];b=a[6];var k=a[10];if(0.01>Math.abs(d-g)&&0.01>Math.abs(f-c)&&0.01>Math.abs(i-b)){if(0.1>Math.abs(d+g)&&0.1>Math.abs(f+c)&&0.1>Math.abs(i+b)&&0.1>Math.abs(e+h+k-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;k=(k+1)/2;d=(d+g)/4;f=(f+c)/4;i=(i+b)/4;e>h&&e>k?0.01>e?(b=0,d=c=0.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>k?0.01>h?(b=0.707106781,c=0,d=0.707106781):(c=Math.sqrt(h), +b=d/c,d=i/c):0.01>k?(c=b=0.707106781,d=0):(d=Math.sqrt(k),b=f/d,c=i/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-i)*(b-i)+(f-c)*(f-c)+(g-d)*(g-d));0.001>Math.abs(a)&&(a=1);this.x=(b-i)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+k-1)/2);return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);this.w>a.w&&(this.w=a.w);return this},max:function(a){this.xb.x&&(this.x=b.x);this.yb.y&&(this.y=b.y);this.zb.z&&(this.z=b.z);this.wb.w&&(this.w=b.w);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+ +this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},toArray:function(){return[this.x, +this.y,this.z,this.w]},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)}});THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3}; +THREE.extend(THREE.Line3.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(0.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a, +b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a); +this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)},clone:function(){return(new THREE.Line3).copy(this)}});THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)}; +THREE.extend(THREE.Box2.prototype,{set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){if(0this.max.x&&(this.max.x=b.x),b.ythis.max.y&&(this.max.y=b.y)}else this.makeEmpty();return this},setFromCenterAndSize:function(){var a=new THREE.Vector2;return function(b,c){var d=a.copy(c).multiplyScalar(0.5);this.min.copy(b).sub(d); +this.max.copy(b).add(d);return this}}(),copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},empty:function(){return this.max.xthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a){return new THREE.Vector2((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/ +(this.max.y-this.min.y))},isIntersectionBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max); +return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box2).copy(this)}});THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)}; +THREE.extend(THREE.Box3.prototype,{set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){if(0this.max.x&&(this.max.x=b.x),b.ythis.max.y&&(this.max.y=b.y),b.zthis.max.z&&(this.max.z=b.z)}else this.makeEmpty();return this},setFromCenterAndSize:function(){var a=new THREE.Vector3; +return function(b,c){var d=a.copy(c).multiplyScalar(0.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},empty:function(){return this.max.xthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<= +this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a){return new THREE.Vector3((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},isIntersectionBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min, +this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=0.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3, +new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x, +this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box3).copy(this)}});THREE.Matrix3=function(a,b,c,d,e,f,g,h,i){this.elements=new Float32Array(9);this.set(void 0!==a?a:1,b||0,c||0,d||0,void 0!==e?e:1,f||0,g||0,h||0,void 0!==i?i:1)}; +THREE.extend(THREE.Matrix3.prototype,{set:function(a,b,c,d,e,f,g,h,i){var k=this.elements;k[0]=a;k[3]=b;k[6]=c;k[1]=d;k[4]=e;k[7]=f;k[2]=g;k[5]=h;k[8]=i;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},multiplyVector3:function(a){console.warn("DEPRECATED: Matrix3's .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)},multiplyVector3Array:function(){var a= +new THREE.Vector3;return function(b){for(var c=0,d=b.length;c=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)- +this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a); +this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius},clone:function(){return(new THREE.Sphere).copy(this)}});THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]}; +THREE.extend(THREE.Frustum.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements,a=c[0],d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],i=c[6],k=c[7],l=c[8],m=c[9],n=c[10],s=c[11],r=c[12],p=c[13],q=c[14],c=c[15];b[0].setComponents(f-a,k-g,s-l,c-r).normalize();b[1].setComponents(f+ +a,k+g,s+l,c+r).normalize();b[2].setComponents(f+d,k+h,s+m,c+p).normalize();b[3].setComponents(f-d,k-h,s-m,c-p).normalize();b[4].setComponents(f-e,k-i,s-n,c-q).normalize();b[5].setComponents(f+e,k+i,s+n,c+q).normalize();return this},intersectsObject:function(){var a=new THREE.Vector3;return function(b){var c=b.matrixWorld,d=this.planes,b=-b.geometry.boundingSphere.radius*c.getMaxScaleOnAxis();a.getPositionFromMatrix(c);for(c=0;6>c;c++)if(d[c].distanceToPoint(a)d;d++)if(b[d].distanceToPoint(c)c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0},clone:function(){return(new THREE.Frustum).copy(this)}});THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0}; +THREE.extend(THREE.Plane.prototype,{set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(), +copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a, +b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},isIntersectionLine:function(a){var b=this.distanceToPoint(a.start),a=this.distanceToPoint(a.end);return 0>b&&0a&&0f||1c?c:a},clampBottom:function(a,b){return a=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a, +b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(0.5-Math.random())},sign:function(a){return 0>a?-1:0this.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1: +f+2;k=this.points[c[0]];l=this.points[c[1]];m=this.points[c[2]];n=this.points[c[3]];h=g*g;i=g*h;d.x=b(k.x,l.x,m.x,n.x,g,h,i);d.y=b(k.y,l.y,m.y,n.y,g,h,i);d.z=b(k.z,l.z,m.z,n.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}(); +THREE.extend(THREE.Triangle.prototype,{constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return 0.5*a.cross(b).length()}}(), +midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&& +a.b.equals(this.b)&&a.c.equals(this.c)},clone:function(){return(new THREE.Triangle).copy(this)}});THREE.Vertex=function(a){console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.");return a};THREE.UV=function(a,b){console.warn("THREE.UV has been DEPRECATED. Use THREE.Vector2 instead.");return new THREE.Vector2(a,b)};THREE.Clock=function(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}; +THREE.extend(THREE.Clock.prototype,{start:function(){this.oldTime=this.startTime=void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();this.running=!0},stop:function(){this.getElapsedTime();this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now(), +a=0.001*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a}});THREE.EventDispatcher=function(){var a={};this.addEventListener=function(b,c){void 0===a[b]&&(a[b]=[]);-1===a[b].indexOf(c)&&a[b].push(c)};this.removeEventListener=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)};this.dispatchEvent=function(b){var c=a[b.type];if(void 0!==c){b.target=this;for(var d=0,e=c.length;dh.scale.x)return k;k.push({distance:i,point:h.position,face:null,object:h})}else if(h instanceof +a.Mesh){f.getPositionFromMatrix(h.matrixWorld);b.set(f,h.geometry.boundingSphere.radius*h.matrixWorld.getMaxScaleOnAxis());if(!i.ray.isIntersectionSphere(b))return k;var s=h.geometry,r=s.vertices,p=h.material instanceof a.MeshFaceMaterial,q=!0===p?h.material.materials:null,y=h.material.side,v,z,t,A=i.precision;h.matrixRotationWorld.extractRotation(h.matrixWorld);g.getInverse(h.matrixWorld);c.copy(i.ray).applyMatrix4(g);for(var I=0,C=s.faces.length;IG)){y=y.side;if(y!==a.DoubleSide&&(v=c.direction.dot(d.normal),!(y===a.FrontSide?0>v:0i.far)){e=c.at(G,e);if(x instanceof a.Face3){if(y=r[x.a],v=r[x.b],z=r[x.c],!a.Triangle.containsPoint(e,y,v,z))continue}else if(x instanceof a.Face4){if(y=r[x.a],v=r[x.b],z=r[x.c],t=r[x.d],!a.Triangle.containsPoint(e,y,v,t)&&!a.Triangle.containsPoint(e,v,z,t))continue}else throw Error("face type not supported"); +k.push({distance:G,point:i.ray.at(G),face:x,faceIndex:I,object:h})}}}}}},k=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;de&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d< +c)return!1;a.lerp(b,c);b.lerp(a,1-d);return!0}var e,f,g=[],h=0,i,k,l=[],m=0,n,s,r=[],p=0,q,y=[],v=0,z,t,A=[],I=0,C,x,G=[],J=0,E={objects:[],sprites:[],lights:[],elements:[]},H=new THREE.Vector3,B=new THREE.Vector4,W=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),F=new THREE.Box3,K=Array(3),L=Array(4),U=new THREE.Matrix4,fa=new THREE.Matrix4,Ca,$a=new THREE.Matrix4,M=new THREE.Matrix3,ca=new THREE.Matrix3,qa=new THREE.Vector3,ha=new THREE.Frustum,ra=new THREE.Vector4,N=new THREE.Vector4; +this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);fa.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);return a.applyProjection(fa)};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);fa.multiplyMatrices(b.matrixWorld,b.projectionMatrixInverse);return a.applyProjection(fa)};this.pickingRay=function(a,b){a.z=-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.sub(a).normalize();return new THREE.Raycaster(a, +c)};this.projectScene=function(g,h,m,Pa){var ta=!1,ka,aa,pa,Y,da,la,Z,oa,gb,nb,ia,Wa,ab;x=t=q=s=0;E.elements.length=0;g.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();U.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));fa.multiplyMatrices(h.projectionMatrix,U);ca.getInverse(U);ca.transpose();ha.setFromMatrix(fa);f=0;E.objects.length=0;E.sprites.length=0;E.lights.length=0;var Fa=function(b){for(var c=0,d=b.children.length;ci.positionScreen.x||1i.positionScreen.y||1i.positionScreen.z||1(Z.positionScreen.x-Y.positionScreen.x)*(da.positionScreen.y-Y.positionScreen.y)-(Z.positionScreen.y-Y.positionScreen.y)*(da.positionScreen.x-Y.positionScreen.x),la===THREE.DoubleSide||ta===(la===THREE.FrontSide))s===p?(ia=new THREE.RenderableFace3,r.push(ia),p++,s++,n=ia):n=r[s++],n.v1.copy(Y),n.v2.copy(da),n.v3.copy(Z);else continue; +else continue;else if(aa instanceof THREE.Face4)if(Y=l[aa.a],da=l[aa.b],Z=l[aa.c],ia=l[aa.d],L[0]=Y.positionScreen,L[1]=da.positionScreen,L[2]=Z.positionScreen,L[3]=ia.positionScreen,!0===Y.visible||!0===da.visible||!0===Z.visible||!0===ia.visible||W.isIntersectionBox(F.setFromPoints(L)))if(ta=0>(ia.positionScreen.x-Y.positionScreen.x)*(da.positionScreen.y-Y.positionScreen.y)-(ia.positionScreen.y-Y.positionScreen.y)*(da.positionScreen.x-Y.positionScreen.x)||0>(da.positionScreen.x-Z.positionScreen.x)* +(ia.positionScreen.y-Z.positionScreen.y)-(da.positionScreen.y-Z.positionScreen.y)*(ia.positionScreen.x-Z.positionScreen.x),la===THREE.DoubleSide||ta===(la===THREE.FrontSide)){if(q===v){var ub=new THREE.RenderableFace4;y.push(ub);v++;q++;n=ub}else n=y[q++];n.v1.copy(Y);n.v2.copy(da);n.v3.copy(Z);n.v4.copy(ia)}else continue;else continue;n.normalModel.copy(aa.normal);!1===ta&&(la===THREE.BackSide||la===THREE.DoubleSide)&&n.normalModel.negate();n.normalModel.applyMatrix3(M).normalize();n.normalModelView.copy(n.normalModel).applyMatrix3(ca); +n.centroidModel.copy(aa.centroid).applyMatrix4(Ca);Z=aa.vertexNormals;Y=0;for(da=Z.length;YB.z&&(x===J?(ta=new THREE.RenderableParticle,G.push(ta),J++,x++,C=ta):C=G[x++],C.object=oa,C.x=B.x/B.w,C.y=B.y/B.w,C.z=B.z,C.rotation=oa.rotation.z,C.scale.x=oa.scale.x*Math.abs(C.x-(B.x+h.projectionMatrix.elements[0])/ +(B.w+h.projectionMatrix.elements[12])),C.scale.y=oa.scale.y*Math.abs(C.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),C.material=oa.material,E.elements.push(C)));!0===Pa&&E.elements.sort(c);return E}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0;this.centroid=new THREE.Vector3}; +THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE.Face3(this.a,this.b,this.c);a.normal.copy(this.normal);a.color.copy(this.color);a.centroid.copy(this.centroid);a.materialIndex=this.materialIndex;var b,c;b=0;for(c=this.vertexNormals.length;be?-1:1,f.vertexTangents[d]=new THREE.Vector4(B.x,B.y,B.z,e)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;ci;i++)if(h[i]==h[(i+1)%3]){e.push(f);break}}else if(a instanceof THREE.Face4){a.a=c[a.a];a.b=c[a.b];a.c=c[a.c];a.d=c[a.d];h=[a.a,a.b,a.c,a.d];d=-1;for(i=0;4>i;i++)h[i]==h[(i+1)%4]&&(0<=d&&e.push(f),d=i);if(0<=d){h.splice(d,1);var l=new THREE.Face3(h[0],h[1],h[2],a.normal,a.color,a.materialIndex);h=0;for(i=this.faceVertexUvs.length;hb.max.x&&(b.max.x=c),db.max.y&&(b.max.y=d),eb.max.z&&(b.max.z=e)}if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere= +new THREE.Sphere);var a=this.attributes.position.array;if(a){for(var b,c=0,d,e,f=0,g=a.length;fc&&(c=b);this.boundingSphere.radius=Math.sqrt(c)}},computeVertexNormals:function(){if(this.attributes.position){var a,b,c,d;a=this.attributes.position.array.length;if(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;aqa?-1:1;h[4*a]=U.x;h[4*a+1]=U.y;h[4*a+2]=U.z;h[4*a+3]=M}if(void 0===this.attributes.index||void 0===this.attributes.position|| +void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var b=this.attributes.index.array,c=this.attributes.position.array,d=this.attributes.normal.array,e=this.attributes.uv.array,f=c.length/3;if(void 0===this.attributes.tangent){var g=4*f;this.attributes.tangent={itemSize:4,array:new Float32Array(g),numItems:g}}for(var h=this.attributes.tangent.array,i=[],k=[],g=0;ga.length?".":a.join("/"))+"/"},initMaterials:function(a,b){for(var c=[],d=0;da.opacity)i.transparent=a.transparent;void 0!==a.depthTest&&(i.depthTest=a.depthTest);void 0!==a.depthWrite&&(i.depthWrite=a.depthWrite);void 0!==a.visible&&(i.visible=a.visible);void 0!==a.flipSided&&(i.side=THREE.BackSide); +void 0!==a.doubleSided&&(i.side=THREE.DoubleSide);void 0!==a.wireframe&&(i.wireframe=a.wireframe);void 0!==a.vertexColors&&("face"===a.vertexColors?i.vertexColors=THREE.FaceColors:a.vertexColors&&(i.vertexColors=THREE.VertexColors));a.colorDiffuse?i.color=f(a.colorDiffuse):a.DbgColor&&(i.color=a.DbgColor);a.colorSpecular&&(i.specular=f(a.colorSpecular));a.colorAmbient&&(i.ambient=f(a.colorAmbient));a.transparency&&(i.opacity=a.transparency);a.specularCoef&&(i.shininess=a.specularCoef);a.mapDiffuse&& +b&&e(i,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap,a.mapDiffuseAnisotropy);a.mapLight&&b&&e(i,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap,a.mapLightAnisotropy);a.mapBump&&b&&e(i,"bumpMap",a.mapBump,a.mapBumpRepeat,a.mapBumpOffset,a.mapBumpWrap,a.mapBumpAnisotropy);a.mapNormal&&b&&e(i,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap,a.mapNormalAnisotropy);a.mapSpecular&&b&&e(i,"specularMap",a.mapSpecular,a.mapSpecularRepeat, +a.mapSpecularOffset,a.mapSpecularWrap,a.mapSpecularAnisotropy);a.mapBumpScale&&(i.bumpScale=a.mapBumpScale);a.mapNormal?(h=THREE.ShaderLib.normalmap,k=THREE.UniformsUtils.clone(h.uniforms),k.tNormal.value=i.normalMap,a.mapNormalFactor&&k.uNormalScale.value.set(a.mapNormalFactor,a.mapNormalFactor),i.map&&(k.tDiffuse.value=i.map,k.enableDiffuse.value=!0),i.specularMap&&(k.tSpecular.value=i.specularMap,k.enableSpecular.value=!0),i.lightMap&&(k.tAO.value=i.lightMap,k.enableAO.value=!0),k.uDiffuseColor.value.setHex(i.color), +k.uSpecularColor.value.setHex(i.specular),k.uAmbientColor.value.setHex(i.ambient),k.uShininess.value=i.shininess,void 0!==i.opacity&&(k.uOpacity.value=i.opacity),h=new THREE.ShaderMaterial({fragmentShader:h.fragmentShader,vertexShader:h.vertexShader,uniforms:k,lights:!0,fog:!0}),i.transparent&&(h.transparent=!0)):h=new THREE[h](i);void 0!==a.DbgName&&(h.name=a.DbgName);return h}};THREE.ImageLoader=function(){THREE.EventDispatcher.call(this);this.crossOrigin=null};THREE.ImageLoader.prototype={constructor:THREE.ImageLoader,load:function(a,b){var c=this;void 0===b&&(b=new Image);b.addEventListener("load",function(){c.dispatchEvent({type:"load",content:b})},!1);b.addEventListener("error",function(){c.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},!1);c.crossOrigin&&(b.crossOrigin=c.crossOrigin);b.src=a}};THREE.JSONLoader=function(a){THREE.Loader.call(this,a);this.withCredentials=!1};THREE.JSONLoader.prototype=Object.create(THREE.Loader.prototype);THREE.JSONLoader.prototype.load=function(a,b,c){c=c&&"string"===typeof c?c:this.extractUrlBase(a);this.onLoadStart();this.loadAjaxJSON(this,a,b,c)}; +THREE.JSONLoader.prototype.loadAjaxJSON=function(a,b,c,d,e){var f=new XMLHttpRequest,g=0;f.onreadystatechange=function(){if(f.readyState===f.DONE)if(200===f.status||0===f.status){if(f.responseText){var h=JSON.parse(f.responseText);a.createModel(h,c,d)}else console.warn("THREE.JSONLoader: ["+b+"] seems to be unreachable or file there is empty");a.onLoadComplete()}else console.error("THREE.JSONLoader: Couldn't load ["+b+"] ["+f.status+"]");else f.readyState===f.LOADING?e&&(0===g&&(g=f.getResponseHeader("Content-Length")), +e({total:g,loaded:f.responseText.length})):f.readyState===f.HEADERS_RECEIVED&&(g=f.getResponseHeader("Content-Length"))};f.open("GET",b,!0);f.withCredentials=this.withCredentials;f.send(null)}; +THREE.JSONLoader.prototype.createModel=function(a,b,c){var d=new THREE.Geometry,e=void 0!==a.scale?1/a.scale:1,f,g,h,i,k,l,m,n,s,r,p,q,y,v,z,t=a.faces;r=a.vertices;var A=a.normals,I=a.colors,C=0;for(f=0;fF.parameters.opacity&& +(F.parameters.transparent=!0);F.parameters.normalMap?(E=THREE.ShaderLib.normalmap,B=THREE.UniformsUtils.clone(E.uniforms),q=F.parameters.color,W=F.parameters.specular,p=F.parameters.ambient,H=F.parameters.shininess,B.tNormal.value=x.textures[F.parameters.normalMap],F.parameters.normalScale&&B.uNormalScale.value.set(F.parameters.normalScale[0],F.parameters.normalScale[1]),F.parameters.map&&(B.tDiffuse.value=F.parameters.map,B.enableDiffuse.value=!0),F.parameters.envMap&&(B.tCube.value=F.parameters.envMap, +B.enableReflection.value=!0,B.uReflectivity.value=F.parameters.reflectivity),F.parameters.lightMap&&(B.tAO.value=F.parameters.lightMap,B.enableAO.value=!0),F.parameters.specularMap&&(B.tSpecular.value=x.textures[F.parameters.specularMap],B.enableSpecular.value=!0),F.parameters.displacementMap&&(B.tDisplacement.value=x.textures[F.parameters.displacementMap],B.enableDisplacement.value=!0,B.uDisplacementBias.value=F.parameters.displacementBias,B.uDisplacementScale.value=F.parameters.displacementScale), +B.uDiffuseColor.value.setHex(q),B.uSpecularColor.value.setHex(W),B.uAmbientColor.value.setHex(p),B.uShininess.value=H,F.parameters.opacity&&(B.uOpacity.value=F.parameters.opacity),s=new THREE.ShaderMaterial({fragmentShader:E.fragmentShader,vertexShader:E.vertexShader,uniforms:B,lights:!0,fog:!0})):s=new THREE[F.type](F.parameters);x.materials[K]=s}for(K in J.materials)if(F=J.materials[K],F.parameters.materials){L=[];for(q=0;qh.end&&(h.end=e);b||(b=g)}}a.firstAnimation=b}; +THREE.MorphAnimMesh.prototype.setAnimationLabel=function(a,b,c){this.geometry.animations||(this.geometry.animations={});this.geometry.animations[a]={start:b,end:c}};THREE.MorphAnimMesh.prototype.playAnimation=function(a,b){var c=this.geometry.animations[a];c?(this.setFrameRange(c.start,c.end),this.duration=1E3*((c.end-c.start)/b),this.time=0):console.warn("animation["+a+"] undefined")}; +THREE.MorphAnimMesh.prototype.updateAnimation=function(a){var b=this.duration/this.length;this.time+=this.direction*a;if(this.mirroredLoop){if(this.time>this.duration||0>this.time)this.direction*=-1,this.time>this.duration&&(this.time=this.duration,this.directionBackwards=!0),0>this.time&&(this.time=0,this.directionBackwards=!1)}else this.time%=this.duration,0>this.time&&(this.time+=this.duration);a=this.startKeyframe+THREE.Math.clamp(Math.floor(this.time/b),0,this.length-1);a!==this.currentKeyframe&& +(this.morphTargetInfluences[this.lastKeyframe]=0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a);b=this.time%b/b;this.directionBackwards&&(b=1-b);this.morphTargetInfluences[this.currentKeyframe]=b;this.morphTargetInfluences[this.lastKeyframe]=1-b}; +THREE.MorphAnimMesh.prototype.clone=function(a){void 0===a&&(a=new THREE.MorphAnimMesh(this.geometry,this.material));a.duration=this.duration;a.mirroredLoop=this.mirroredLoop;a.time=this.time;a.lastKeyframe=this.lastKeyframe;a.currentKeyframe=this.currentKeyframe;a.direction=this.direction;a.directionBackwards=this.directionBackwards;THREE.Mesh.prototype.clone.call(this,a);return a};THREE.Ribbon=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=b};THREE.Ribbon.prototype=Object.create(THREE.Object3D.prototype);THREE.Ribbon.prototype.clone=function(a){void 0===a&&(a=new THREE.Ribbon(this.geometry,this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.LOD=function(){THREE.Object3D.call(this);this.LODs=[]};THREE.LOD.prototype=Object.create(THREE.Object3D.prototype);THREE.LOD.prototype.addLevel=function(a,b){void 0===b&&(b=0);for(var b=Math.abs(b),c=0;c=this.LODs[b].visibleAtDistance)this.LODs[b-1].object3D.visible=!1,this.LODs[b].object3D.visible=!0;else break;for(;bI&&t.clearRect(Ka.min.x|0,Ka.min.y|0,Ka.max.x-Ka.min.x|0,Ka.max.y-Ka.min.y|0),0=j||(j*=f.intensity,c.add(gb.multiplyScalar(j)))}else f instanceof THREE.PointLight&&(g=bb.getPositionFromMatrix(f.matrixWorld),j=b.dot(bb.subVectors(g,a).normalize()),0>=j||(j*=0==f.distance?1:1-Math.min(a.distanceTo(g)/f.distance,1),0!=j&&(j*=f.intensity,c.add(gb.multiplyScalar(j)))))}}function x(a,d,e,f,g,j,h,i){l.info.render.vertices+= +3;l.info.render.faces++;b(i.opacity);c(i.blending);M=a.positionScreen.x;ca=a.positionScreen.y;qa=d.positionScreen.x;ha=d.positionScreen.y;ra=e.positionScreen.x;N=e.positionScreen.y;y(M,ca,qa,ha,ra,N);(i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial)&&null===i.map?(Z.copy(i.color),oa.copy(i.emissive),i.vertexColors===THREE.FaceColors&&Z.multiply(h.color),!0===gc?!1===i.wireframe&&i.shading==THREE.SmoothShading&&3==h.vertexNormalsLength?(pa.copy(vb),Y.copy(vb),da.copy(vb), +q(h.v1.positionWorld,h.vertexNormalsModel[0],pa),q(h.v2.positionWorld,h.vertexNormalsModel[1],Y),q(h.v3.positionWorld,h.vertexNormalsModel[2],da),pa.multiply(Z).add(oa),Y.multiply(Z).add(oa),da.multiply(Z).add(oa),la.addColors(Y,da).multiplyScalar(0.5),Fa=E(pa,Y,da,la),G(M,ca,qa,ha,ra,N,0,0,1,0,0,1,Fa)):(aa.copy(vb),q(h.centroidModel,h.normalModel,aa),aa.multiply(Z).add(oa),!0===i.wireframe?C(aa,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(aa)):!0===i.wireframe?C(i.color,i.wireframeLinewidth, +i.wireframeLinecap,i.wireframeLinejoin):A(i.color)):i instanceof THREE.MeshBasicMaterial||i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial?null!==i.map?i.map.mapping instanceof THREE.UVMapping&&(Xa=h.uvs[0],F(M,ca,qa,ha,ra,N,Xa[f].x,Xa[f].y,Xa[g].x,Xa[g].y,Xa[j].x,Xa[j].y,i.map)):null!==i.envMap?i.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(bb.copy(h.vertexNormalsModelView[f]),ub=0.5*bb.x+0.5,Ib=0.5*bb.y+0.5,bb.copy(h.vertexNormalsModelView[g]),Jb=0.5* +bb.x+0.5,fc=0.5*bb.y+0.5,bb.copy(h.vertexNormalsModelView[j]),Ab=0.5*bb.x+0.5,mc=0.5*bb.y+0.5,F(M,ca,qa,ha,ra,N,ub,Ib,Jb,fc,Ab,mc,i.envMap)):(aa.copy(i.color),i.vertexColors===THREE.FaceColors&&aa.multiply(h.color),!0===i.wireframe?C(aa,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(aa)):i instanceof THREE.MeshDepthMaterial?(Wa=p.near,ab=p.far,pa.r=pa.g=pa.b=1-k(a.positionScreen.z*a.positionScreen.w,Wa,ab),Y.r=Y.g=Y.b=1-k(d.positionScreen.z*d.positionScreen.w,Wa,ab),da.r=da.g=da.b= +1-k(e.positionScreen.z*e.positionScreen.w,Wa,ab),la.addColors(Y,da).multiplyScalar(0.5),Fa=E(pa,Y,da,la),G(M,ca,qa,ha,ra,N,0,0,1,0,0,1,Fa)):i instanceof THREE.MeshNormalMaterial&&(i.shading==THREE.FlatShading?(a=h.normalModelView,aa.setRGB(a.x,a.y,a.z).multiplyScalar(0.5).addScalar(0.5),!0===i.wireframe?C(aa,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(aa)):i.shading==THREE.SmoothShading&&(a=h.vertexNormalsModelView[f],pa.setRGB(a.x,a.y,a.z).multiplyScalar(0.5).addScalar(0.5),a= +h.vertexNormalsModelView[g],Y.setRGB(a.x,a.y,a.z).multiplyScalar(0.5).addScalar(0.5),a=h.vertexNormalsModelView[j],da.setRGB(a.x,a.y,a.z).multiplyScalar(0.5).addScalar(0.5),la.addColors(Y,da).multiplyScalar(0.5),Fa=E(pa,Y,da,la),G(M,ca,qa,ha,ra,N,0,0,1,0,0,1,Fa)))}function y(a,b,c,d,e,f){t.beginPath();t.moveTo(a,b);t.lineTo(c,d);t.lineTo(e,f);t.closePath()}function B(a,b,c,d,e,f,g,j){t.beginPath();t.moveTo(a,b);t.lineTo(c,d);t.lineTo(e,f);t.lineTo(g,j);t.closePath()}function C(a,b,c,j){d(b);e(c); +f(j);g(a.getStyle());t.stroke();Va.expandByScalar(2*b)}function A(a){h(a.getStyle());t.fill()}function F(a,b,c,d,e,f,g,j,i,wa,k,l,n){if(!(n instanceof THREE.DataTexture||void 0===n.image||0==n.image.width)){if(!0===n.needsUpdate){var m=n.wrapS==THREE.RepeatWrapping,hb=n.wrapT==THREE.RepeatWrapping;nb[n.id]=t.createPattern(n.image,!0===m&&!0===hb?"repeat":!0===m&&!1===hb?"repeat-x":!1===m&&!0===hb?"repeat-y":"no-repeat");n.needsUpdate=!1}void 0===nb[n.id]?h("rgba(0,0,0,1)"):h(nb[n.id]);var m=n.offset.x/ +n.repeat.x,hb=n.offset.y/n.repeat.y,p=n.image.width*n.repeat.x,q=n.image.height*n.repeat.y,g=(g+m)*p,j=(1-j+hb)*q,c=c-a,d=d-b,e=e-a,f=f-b,i=(i+m)*p-g,wa=(1-wa+hb)*q-j,k=(k+m)*p-g,l=(1-l+hb)*q-j,m=i*l-k*wa;0===m?(void 0===ia[n.id]&&(b=document.createElement("canvas"),b.width=n.image.width,b.height=n.image.height,b=b.getContext("2d"),b.drawImage(n.image,0,0),ia[n.id]=b.getImageData(0,0,n.image.width,n.image.height).data),b=ia[n.id],g=4*(Math.floor(g)+Math.floor(j)*n.image.width),aa.setRGB(b[g]/255, +b[g+1]/255,b[g+2]/255),A(aa)):(m=1/m,n=(l*c-wa*e)*m,wa=(l*d-wa*f)*m,c=(i*e-k*c)*m,d=(i*f-k*d)*m,a=a-n*g-c*j,g=b-wa*g-d*j,t.save(),t.transform(n,wa,c,d,a,g),t.fill(),t.restore())}}function G(a,b,c,d,e,f,g,j,i,h,wa,k,n){var l,m;l=n.width-1;m=n.height-1;g*=l;j*=m;c-=a;d-=b;e-=a;f-=b;i=i*l-g;h=h*m-j;wa=wa*l-g;k=k*m-j;m=1/(i*k-wa*h);l=(k*c-h*e)*m;h=(k*d-h*f)*m;c=(i*e-wa*c)*m;d=(i*f-wa*d)*m;a=a-l*g-c*j;b=b-h*g-d*j;t.save();t.transform(l,h,c,d,a,b);t.clip();t.drawImage(n,0,0);t.restore()}function E(a,b, +c,d){Ra[0]=255*a.r|0;Ra[1]=255*a.g|0;Ra[2]=255*a.b|0;Ra[4]=255*b.r|0;Ra[5]=255*b.g|0;Ra[6]=255*b.b|0;Ra[8]=255*c.r|0;Ra[9]=255*c.g|0;Ra[10]=255*c.b|0;Ra[12]=255*d.r|0;Ra[13]=255*d.g|0;Ra[14]=255*d.b|0;j.putImageData(yb,0,0);Sa.drawImage(xb,0,0);return cb}function I(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===p instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{!0=== +this.autoClear&&this.clear();t.setTransform(1,0,0,-1,v,z);l.info.render.vertices=0;l.info.render.faces=0;m=r.projectScene(a,p,this.sortObjects,this.sortElements);n=m.elements;s=m.lights;gc=0>1,nd=H.height>>1,Cb=wa.scale.x*v,Db=wa.scale.y*z,Bb=Cb*md,hb=Db*nd,Va.min.set(X.x-Bb,X.y-hb),Va.max.set(X.x+Bb,X.y+hb),!1!==pb.isIntersectionBox(Va)&&(t.save(),t.translate(X.x,X.y),t.rotate(-wa.rotation),t.scale(Cb,-Db),t.translate(-md,-nd),t.drawImage(H,0,0),t.restore())):P instanceof THREE.ParticleCanvasMaterial&&(Bb=wa.scale.x*v,hb=wa.scale.y*z,Va.min.set(X.x-Bb,X.y-hb),Va.max.set(X.x+Bb,X.y+hb),!1!==pb.isIntersectionBox(Va)&&(g(P.color.getStyle()), +h(P.color.getStyle()),t.save(),t.translate(X.x,X.y),t.rotate(-wa.rotation),t.scale(Bb,hb),P.program(t),t.restore()))}else if(H instanceof THREE.RenderableLine)K=H.v1,L=H.v2,K.positionScreen.x*=v,K.positionScreen.y*=z,L.positionScreen.x*=v,L.positionScreen.y*=z,Va.setFromPoints([K.positionScreen,L.positionScreen]),!0===pb.isIntersectionBox(Va)&&(X=K,wa=L,b(P.opacity),c(P.blending),t.beginPath(),t.moveTo(X.positionScreen.x,X.positionScreen.y),t.lineTo(wa.positionScreen.x,wa.positionScreen.y),P instanceof +THREE.LineBasicMaterial?(d(P.linewidth),e(P.linecap),f(P.linejoin),g(P.color.getStyle()),i(null,null),t.stroke(),Va.expandByScalar(2*P.linewidth)):P instanceof THREE.LineDashedMaterial&&(d(P.linewidth),e(P.linecap),f(P.linejoin),g(P.color.getStyle()),i(P.dashSize,P.gapSize),t.stroke(),Va.expandByScalar(2*P.linewidth)));else if(H instanceof THREE.RenderableFace3){K=H.v1;L=H.v2;U=H.v3;if(-1>K.positionScreen.z||1L.positionScreen.z||1 +U.positionScreen.z||1K.positionScreen.z|| +1L.positionScreen.z||1U.positionScreen.z||1fa.positionScreen.z||1 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif", +lights_lambert_vertex:"vLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\nvLightBack = vec3( 0.0 );\n#endif\ntransformedNormal = normalize( transformedNormal );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( transformedNormal, dirVector );\nvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\ndirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\ndirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n#ifdef DOUBLE_SIDED\nvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n#endif\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat dotProduct = dot( transformedNormal, lVector );\nvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\npointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\npointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\n#ifdef DOUBLE_SIDED\nvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat dotProduct = dot( transformedNormal, lVector );\nvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\nspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\nspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\n#ifdef DOUBLE_SIDED\nvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( transformedNormal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\nvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n#ifdef DOUBLE_SIDED\nvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n#endif\n}\n#endif\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\n#ifdef DOUBLE_SIDED\nvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\n#endif", +lights_phong_pars_vertex:"#ifndef PHONG_PER_PIXEL\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvarying vec3 vWorldPosition;\n#endif", +lights_phong_vertex:"#ifndef PHONG_PER_PIXEL\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nvSpotLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvWorldPosition = worldPosition.xyz;\n#endif", +lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#else\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#else\nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvarying vec3 vWorldPosition;\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;", +lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#ifdef DOUBLE_SIDED\nnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n#endif\n#ifdef USE_NORMALMAP\nnormal = perturbNormal2Arb( -viewPosition, normal );\n#elif defined( USE_BUMPMAP )\nnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vPointLight[ i ].xyz );\nfloat lDistance = vPointLight[ i ].w;\n#endif\nfloat dotProduct = dot( normal, lVector );\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dotProduct, 0.0 );\n#endif\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\nvec3 pointHalfVector = normalize( lVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;\n#else\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nvec3 spotDiffuse = vec3( 0.0 );\nvec3 spotSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vSpotLight[ i ].xyz );\nfloat lDistance = vSpotLight[ i ].w;\n#endif\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\nfloat dotProduct = dot( normal, lVector );\n#ifdef WRAP_AROUND\nfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n#else\nfloat spotDiffuseWeight = max( dotProduct, 0.0 );\n#endif\nspotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;\nvec3 spotHalfVector = normalize( lVector + viewPosition );\nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\nfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, spotHalfVector ), 5.0 );\nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;\n#else\nspotSpecular += specular * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, dirVector );\n#ifdef WRAP_AROUND\nfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dotProduct, 0.0 );\n#endif\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n#else\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nvec3 hemiDiffuse = vec3( 0.0 );\nvec3 hemiSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\nhemiDiffuse += diffuse * hemiColor;\nvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\nfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\nfloat hemiSpecularWeightSky = specularStrength * max( pow( hemiDotNormalHalfSky, shininess ), 0.0 );\nvec3 lVectorGround = -lVector;\nvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\nfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\nfloat hemiSpecularWeightGround = specularStrength * max( pow( hemiDotNormalHalfGround, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat dotProductGround = dot( normal, lVectorGround );\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\nvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\nhemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n#else\nhemiSpecular += specular * hemiColor * ( hemiSpecularWeightSky + hemiSpecularWeightGround ) * hemiDiffuseWeight;\n#endif\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\ntotalDiffuse += hemiDiffuse;\ntotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\ntotalDiffuse += spotDiffuse;\ntotalSpecular += spotSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif", +color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n#ifdef GAMMA_INPUT\nvColor = color * color;\n#else\nvColor = color;\n#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n#ifdef BONE_TEXTURE\nuniform sampler2D boneTexture;\nmat4 getBoneMatrix( const in float i ) {\nfloat j = i * 4.0;\nfloat x = mod( j, N_BONE_PIXEL_X );\nfloat y = floor( j / N_BONE_PIXEL_X );\nconst float dx = 1.0 / N_BONE_PIXEL_X;\nconst float dy = 1.0 / N_BONE_PIXEL_Y;\ny = dy * ( y + 0.5 );\nvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\nvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\nvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\nvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\nmat4 bone = mat4( v1, v2, v3, v4 );\nreturn bone;\n}\n#else\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\nmat4 getBoneMatrix( const in float i ) {\nmat4 bone = boneGlobalMatrices[ int(i) ];\nreturn bone;\n}\n#endif\n#endif", +skinbase_vertex:"#ifdef USE_SKINNING\nmat4 boneMatX = getBoneMatrix( skinIndex.x );\nmat4 boneMatY = getBoneMatrix( skinIndex.y );\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n#ifdef USE_MORPHTARGETS\nvec4 skinVertex = vec4( morphed, 1.0 );\n#else\nvec4 skinVertex = vec4( position, 1.0 );\n#endif\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n#ifndef USE_MORPHNORMALS\nuniform float morphTargetInfluences[ 8 ];\n#else\nuniform float morphTargetInfluences[ 4 ];\n#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0.0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n#ifndef USE_MORPHNORMALS\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n#endif\nmorphed += position;\n#endif", +default_vertex:"vec4 mvPosition;\n#ifdef USE_SKINNING\nmvPosition = modelViewMatrix * skinned;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\nmvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\nmvPosition = modelViewMatrix * vec4( position, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\nvec3 morphedNormal = vec3( 0.0 );\nmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\nmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\nmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\nmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\nmorphedNormal += normal;\n#endif", +skinnormal_vertex:"#ifdef USE_SKINNING\nmat4 skinMatrix = skinWeight.x * boneMatX;\nskinMatrix \t+= skinWeight.y * boneMatY;\n#ifdef USE_MORPHNORMALS\nvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n#else\nvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n#endif\n#endif",defaultnormal_vertex:"vec3 objectNormal;\n#ifdef USE_SKINNING\nobjectNormal = skinnedNormal.xyz;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHNORMALS )\nobjectNormal = morphedNormal;\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHNORMALS )\nobjectNormal = normal;\n#endif\n#ifdef FLIP_SIDED\nobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;", +shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\nuniform sampler2D shadowMap[ MAX_SHADOWS ];\nuniform vec2 shadowMapSize[ MAX_SHADOWS ];\nuniform float shadowDarkness[ MAX_SHADOWS ];\nuniform float shadowBias[ MAX_SHADOWS ];\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nfloat unpackDepth( const in vec4 rgba_depth ) {\nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\nfloat depth = dot( rgba_depth, bit_shift );\nreturn depth;\n}\n#endif",shadowmap_fragment:"#ifdef USE_SHADOWMAP\n#ifdef SHADOWMAP_DEBUG\nvec3 frustumColors[3];\nfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\nfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\nfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n#endif\n#ifdef SHADOWMAP_CASCADE\nint inFrustumCount = 0;\n#endif\nfloat fDepth;\nvec3 shadowColor = vec3( 1.0 );\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\nbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\nbool inFrustum = all( inFrustumVec );\n#ifdef SHADOWMAP_CASCADE\ninFrustumCount += int( inFrustum );\nbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n#else\nbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n#endif\nbool frustumTest = all( frustumTestVec );\nif ( frustumTest ) {\nshadowCoord.z += shadowBias[ i ];\n#if defined( SHADOWMAP_TYPE_PCF )\nfloat shadow = 0.0;\nconst float shadowDelta = 1.0 / 9.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.25 * xPixelOffset;\nfloat dy0 = -1.25 * yPixelOffset;\nfloat dx1 = 1.25 * xPixelOffset;\nfloat dy1 = 1.25 * yPixelOffset;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\nfloat shadow = 0.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.0 * xPixelOffset;\nfloat dy0 = -1.0 * yPixelOffset;\nfloat dx1 = 1.0 * xPixelOffset;\nfloat dy1 = 1.0 * yPixelOffset;\nmat3 shadowKernel;\nmat3 depthKernel;\ndepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\nif ( depthKernel[0][0] < shadowCoord.z ) shadowKernel[0][0] = 0.25;\nelse shadowKernel[0][0] = 0.0;\ndepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\nif ( depthKernel[0][1] < shadowCoord.z ) shadowKernel[0][1] = 0.25;\nelse shadowKernel[0][1] = 0.0;\ndepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i], shadowCoord.xy + vec2( dx0, dy1 ) ) );\nif ( depthKernel[0][2] < shadowCoord.z ) shadowKernel[0][2] = 0.25;\nelse shadowKernel[0][2] = 0.0;\ndepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\nif ( depthKernel[1][0] < shadowCoord.z ) shadowKernel[1][0] = 0.25;\nelse shadowKernel[1][0] = 0.0;\ndepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\nif ( depthKernel[1][1] < shadowCoord.z ) shadowKernel[1][1] = 0.25;\nelse shadowKernel[1][1] = 0.0;\ndepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\nif ( depthKernel[1][2] < shadowCoord.z ) shadowKernel[1][2] = 0.25;\nelse shadowKernel[1][2] = 0.0;\ndepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\nif ( depthKernel[2][0] < shadowCoord.z ) shadowKernel[2][0] = 0.25;\nelse shadowKernel[2][0] = 0.0;\ndepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\nif ( depthKernel[2][1] < shadowCoord.z ) shadowKernel[2][1] = 0.25;\nelse shadowKernel[2][1] = 0.0;\ndepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nif ( depthKernel[2][2] < shadowCoord.z ) shadowKernel[2][2] = 0.25;\nelse shadowKernel[2][2] = 0.0;\nvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\nshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\nshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\nvec4 shadowValues;\nshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\nshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\nshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\nshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\nshadow = dot( shadowValues, vec4( 1.0 ) );\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n#endif\n}\n#ifdef SHADOWMAP_DEBUG\n#ifdef SHADOWMAP_CASCADE\nif ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];\n#else\nif ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];\n#endif\n#endif\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"}; +THREE.UniformsUtils={merge:function(a){var b,c,d,e={};for(b=0;b dashSize ) {\ndiscard;\n}\ngl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f", +value:1}},vertexShader:"void main() {\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform float mNear;\nuniform float mFar;\nuniform float opacity;\nvoid main() {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat color = 1.0 - smoothstep( mNear, mFar, depth );\ngl_FragColor = vec4( vec3( color ), opacity );\n}"},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:"varying vec3 vNormal;\nvoid main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvNormal = normalize( normalMatrix * normal );\ngl_Position = projectionMatrix * mvPosition;\n}", +fragmentShader:"uniform float opacity;\nvarying vec3 vNormal;\nvoid main() {\ngl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n}"},normalmap:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{enableAO:{type:"i",value:0},enableDiffuse:{type:"i",value:0},enableSpecular:{type:"i",value:0},enableReflection:{type:"i",value:0},enableDisplacement:{type:"i",value:0},tDisplacement:{type:"t",value:null},tDiffuse:{type:"t",value:null}, +tCube:{type:"t",value:null},tNormal:{type:"t",value:null},tSpecular:{type:"t",value:null},tAO:{type:"t",value:null},uNormalScale:{type:"v2",value:new THREE.Vector2(1,1)},uDisplacementBias:{type:"f",value:0},uDisplacementScale:{type:"f",value:1},uDiffuseColor:{type:"c",value:new THREE.Color(16777215)},uSpecularColor:{type:"c",value:new THREE.Color(1118481)},uAmbientColor:{type:"c",value:new THREE.Color(16777215)},uShininess:{type:"f",value:30},uOpacity:{type:"f",value:1},useRefract:{type:"i",value:0}, +uRefractionRatio:{type:"f",value:0.98},uReflectivity:{type:"f",value:0.5},uOffset:{type:"v2",value:new THREE.Vector2(0,0)},uRepeat:{type:"v2",value:new THREE.Vector2(1,1)},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),fragmentShader:["uniform vec3 uAmbientColor;\nuniform vec3 uDiffuseColor;\nuniform vec3 uSpecularColor;\nuniform float uShininess;\nuniform float uOpacity;\nuniform bool enableDiffuse;\nuniform bool enableSpecular;\nuniform bool enableAO;\nuniform bool enableReflection;\nuniform sampler2D tDiffuse;\nuniform sampler2D tNormal;\nuniform sampler2D tSpecular;\nuniform sampler2D tAO;\nuniform samplerCube tCube;\nuniform vec2 uNormalScale;\nuniform bool useRefract;\nuniform float uRefractionRatio;\nuniform float uReflectivity;\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;", +THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3( 1.0 ), uOpacity );\nvec3 specularTex = vec3( 1.0 );\nvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\nnormalTex.xy *= uNormalScale;\nnormalTex = normalize( normalTex );\nif( enableDiffuse ) {\n#ifdef GAMMA_INPUT\nvec4 texelColor = texture2D( tDiffuse, vUv );\ntexelColor.xyz *= texelColor.xyz;\ngl_FragColor = gl_FragColor * texelColor;\n#else\ngl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\n#endif\n}\nif( enableAO ) {\n#ifdef GAMMA_INPUT\nvec4 aoColor = texture2D( tAO, vUv );\naoColor.xyz *= aoColor.xyz;\ngl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\n#endif\n}\nif( enableSpecular )\nspecularTex = texture2D( tSpecular, vUv ).xyz;\nmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\nvec3 finalNormal = tsb * normalTex;\n#ifdef FLIP_SIDED\nfinalNormal = -finalNormal;\n#endif\nvec3 normal = normalize( finalNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 pointVector = lPosition.xyz + vViewPosition.xyz;\nfloat pointDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\npointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );\npointVector = normalize( pointVector );\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\n#endif\npointDiffuse += pointDistance * pointLightColor[ i ] * uDiffuseColor * pointDiffuseWeight;\nvec3 pointHalfVector = normalize( pointVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( pointVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;\n#else\npointSpecular += pointDistance * pointLightColor[ i ] * uSpecularColor * pointSpecularWeight * pointDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nvec3 spotDiffuse = vec3( 0.0 );\nvec3 spotSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 spotVector = lPosition.xyz + vViewPosition.xyz;\nfloat spotDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );\nspotVector = normalize( spotVector );\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\n#ifdef WRAP_AROUND\nfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );\nfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );\nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n#else\nfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );\n#endif\nspotDiffuse += spotDistance * spotLightColor[ i ] * uDiffuseColor * spotDiffuseWeight * spotEffect;\nvec3 spotHalfVector = normalize( spotVector + viewPosition );\nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\nfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( spotVector, spotHalfVector ), 5.0 );\nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;\n#else\nspotSpecular += spotDistance * spotLightColor[ i ] * uSpecularColor * spotSpecularWeight * spotDiffuseWeight * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\nfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n#endif\ndirDiffuse += directionalLightColor[ i ] * uDiffuseColor * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n#else\ndirSpecular += directionalLightColor[ i ] * uSpecularColor * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nvec3 hemiDiffuse = vec3( 0.0 );\nvec3 hemiSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\nhemiDiffuse += uDiffuseColor * hemiColor;\nvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\nfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\nfloat hemiSpecularWeightSky = specularTex.r * max( pow( hemiDotNormalHalfSky, uShininess ), 0.0 );\nvec3 lVectorGround = -lVector;\nvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\nfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\nfloat hemiSpecularWeightGround = specularTex.r * max( pow( hemiDotNormalHalfGround, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat dotProductGround = dot( normal, lVectorGround );\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlickSky = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\nvec3 schlickGround = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\nhemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n#else\nhemiSpecular += uSpecularColor * hemiColor * ( hemiSpecularWeightSky + hemiSpecularWeightGround ) * hemiDiffuseWeight;\n#endif\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\ntotalDiffuse += hemiDiffuse;\ntotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\ntotalDiffuse += spotDiffuse;\ntotalSpecular += spotSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor ) + totalSpecular;\n#endif\nif ( enableReflection ) {\nvec3 vReflect;\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nvReflect = refract( cameraToVertex, normal, uRefractionRatio );\n} else {\nvReflect = reflect( cameraToVertex, normal );\n}\nvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * uReflectivity );\n}", +THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;\nuniform vec2 uOffset;\nuniform vec2 uRepeat;\nuniform bool enableDisplacement;\n#ifdef VERTEX_TEXTURES\nuniform sampler2D tDisplacement;\nuniform float uDisplacementScale;\nuniform float uDisplacementBias;\n#endif\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;", +THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,"#ifdef USE_SKINNING\nvNormal = normalize( normalMatrix * skinnedNormal.xyz );\nvec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );\nvTangent = normalize( normalMatrix * skinnedTangent.xyz );\n#else\nvNormal = normalize( normalMatrix * normal );\nvTangent = normalize( normalMatrix * tangent.xyz );\n#endif\nvBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );\nvUv = uv * uRepeat + uOffset;\nvec3 displacedPosition;\n#ifdef VERTEX_TEXTURES\nif ( enableDisplacement ) {\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\ndisplacedPosition = position + normalize( normal ) * df;\n} else {\n#ifdef USE_SKINNING\nvec4 skinVertex = vec4( position, 1.0 );\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\ndisplacedPosition = skinned.xyz;\n#else\ndisplacedPosition = position;\n#endif\n}\n#else\n#ifdef USE_SKINNING\nvec4 skinVertex = vec4( position, 1.0 );\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\ndisplacedPosition = skinned.xyz;\n#else\ndisplacedPosition = position;\n#endif\n#endif\nvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );\nvec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\nvWorldPosition = worldPosition.xyz;\nvViewPosition = -mvPosition.xyz;\n#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n}\n#endif\n}"].join("\n")}, +cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vWorldPosition;\nvoid main() {\nvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\nvWorldPosition = worldPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\nvoid main() {\ngl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n}"}, +depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}};THREE.WebGLRenderer=function(a){function b(a){if(a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)j.deleteBuffer(a.__webglCustomAttributesList[b].buffer)}function c(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var e in d.attributes){var f=d.attributes[e];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var g=1;"v2"===f.type?g=2:"v3"===f.type?g=3:"v4"===f.type? +g=4:"c"===f.type&&(g=3);f.size=g;f.array=new Float32Array(c*g);f.buffer=j.createBuffer();f.buffer.belongsToAttribute=e;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}}function d(a,b){var c=b.geometry,d=a.faces3,h=a.faces4,i=3*d.length+4*h.length,k=1*d.length+2*h.length,h=3*d.length+4*h.length,d=e(b,a),n=g(d),l=f(d),m=d.vertexColors?d.vertexColors:!1;a.__vertexArray=new Float32Array(3*i);l&&(a.__normalArray=new Float32Array(3*i));c.hasTangents&&(a.__tangentArray=new Float32Array(4*i));m&& +(a.__colorArray=new Float32Array(3*i));if(n){if(0l;l++)N.autoScaleCubemaps&&!f?(m=k,r=l,t=c.image[l],y=gd,t.width<=y&&t.height<=y||(z=Math.max(t.width,t.height),v=Math.floor(t.width*y/z),y=Math.floor(t.height*y/z),z=document.createElement("canvas"),z.width=v,z.height=y,z.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,v,y),t=z),m[r]=t):k[l]=c.image[l];l=k[0];m=0===(l.width&l.width-1)&&0===(l.height&l.height-1);r=L(c.format); +t=L(c.type);W(j.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){y=k[l].mipmaps;z=0;for(B=y.length;z=Mc&&console.warn("WebGLRenderer: trying to use "+ +a+" texture units while this GPU supports only "+Mc);Y+=1;return a}function C(a,b){a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function x(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function G(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function J(a){a!==ub&&(j.lineWidth(a),ub=a)}function E(a,b,c){ab!==a&&(a?j.enable(j.POLYGON_OFFSET_FILL):j.disable(j.POLYGON_OFFSET_FILL),ab=a);if(a&& +(Fa!==b||Xa!==c))j.polygonOffset(b,c),Fa=b,Xa=c}function H(a){for(var a=a.split("\n"),b=0,c=a.length;bb;b++)j.deleteFramebuffer(a.__webglFramebuffer[b]),j.deleteRenderbuffer(a.__webglRenderbuffer[b]); +else j.deleteFramebuffer(a.__webglFramebuffer),j.deleteRenderbuffer(a.__webglRenderbuffer);N.info.memory.textures--},X=function(a){a=a.target;a.removeEventListener("dispose",X);Pc(a)},Pc=function(a){var b=a.program;if(void 0!==b){a.program=void 0;var c,d,e=!1,a=0;for(c=Ma.length;ad.numSupportedMorphTargets?(i.sort(n),i.length=d.numSupportedMorphTargets):i.length>d.numSupportedMorphNormals?i.sort(n):0===i.length&&i.push([0,0]);for(h=0;hxa;xa++)nc=ab[xa],Fb[kb]=nc.x,Fb[kb+1]=nc.y,Fb[kb+2]=nc.z,kb+=3;else for(xa=0;3>xa;xa++)Fb[kb]=Xa.x,Fb[kb+1]=Xa.y,Fb[kb+2]=Xa.z,kb+=3;D=0;for(V=va.length;Dxa;xa++)nc= +ab[xa],Fb[kb]=nc.x,Fb[kb+1]=nc.y,Fb[kb+2]=nc.z,kb+=3;else for(xa=0;4>xa;xa++)Fb[kb]=Xa.x,Fb[kb+1]=Xa.y,Fb[kb+2]=Xa.z,kb+=3;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,Fb,Pa)}if(Cc&&pd&&bb){D=0;for(V=ua.length;Dxa;xa++)Ab=pb[xa],Dc[ic]=Ab.x,Dc[ic+1]=Ab.y,ic+=2;D=0;for(V=va.length;Dxa;xa++)Ab=pb[xa],Dc[ic]=Ab.x,Dc[ic+1]=Ab.y,ic+=2;0xa;xa++)yc=ub[xa],Ec[jc]=yc.x,Ec[jc+1]=yc.y,jc+=2;D=0;for(V=va.length;Dxa;xa++)yc=ub[xa],Ec[jc]=yc.x,Ec[jc+1]=yc.y,jc+=2;0f;f++){a.__webglFramebuffer[f]=j.createFramebuffer();a.__webglRenderbuffer[f]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,i=j.TEXTURE_CUBE_MAP_POSITIVE_X+f;j.bindFramebuffer(j.FRAMEBUFFER, +a.__webglFramebuffer[f]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,i,g.__webglTexture,0);F(a.__webglRenderbuffer[f],a)}c&&j.generateMipmap(j.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=j.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),W(j.TEXTURE_2D,a,c),j.texImage2D(j.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer), +j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_ATTACHMENT,j.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_STENCIL_ATTACHMENT,j.RENDERBUFFER,a.__webglRenderbuffer):F(a.__webglRenderbuffer,a),c&&j.generateMipmap(j.TEXTURE_2D);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER, +null);j.bindFramebuffer(j.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=fc,a=Ab,d=Ib,e=Jb);b!==Pa&&(j.bindFramebuffer(j.FRAMEBUFFER,b),j.viewport(d,e,c,a),Pa=b);mc=c;pb=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};THREE.WebGLRenderTarget=function(a,b,c){THREE.EventDispatcher.call(this);this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1); +this.format=void 0!==c.format?c.format:THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0;this.shareDepthFrom=null}; +THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;a.shareDepthFrom=this.shareDepthFrom;return a}; +THREE.WebGLRenderTarget.prototype.dispose=function(){this.dispatchEvent({type:"dispose"})};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)};THREE.RenderableFace3=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.material=this.color=null;this.uvs=[[]];this.z=null};THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.v4=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3]; +this.material=this.color=null;this.uvs=[[]];this.z=null};THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=this.object=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.material=null};THREE.GeometryUtils={merge:function(a,b){var c,d,e=a.vertices.length,f=b instanceof THREE.Mesh?b.geometry:b,g=a.vertices,h=f.vertices,i=a.faces,k=f.faces,l=a.faceVertexUvs[0],f=f.faceVertexUvs[0];b instanceof THREE.Mesh&&(b.matrixAutoUpdate&&b.updateMatrix(),c=b.matrix,d=new THREE.Matrix3,d.getInverse(c),d.transpose());for(var m=0,n=h.length;ma?b(c,e-1):k[e]>8&255,i>>16&255,i>>24&255)),d}d.mipmapCount=1;h[2]&131072&&!1!==b&&(d.mipmapCount=Math.max(1,h[7]));d.isCubemap=h[28]&512?!0:!1;d.width=h[4];d.height=h[3];for(var h=h[1]+4,f=d.width,g=d.height,i=d.isCubemap? +6:1,k=0;km-1?0:m-1,s=m+1>e-1?e-1:m+1,r=0>l-1?0:l-1,p=l+1>d-1?d-1:l+1,q=[],y=[0,0,h[4*(m*d+l)]/255*b];q.push([-1,0,h[4*(m*d+r)]/255*b]);q.push([-1,-1,h[4*(n*d+r)]/255*b]);q.push([0,-1,h[4*(n*d+l)]/255*b]);q.push([1,-1,h[4*(n*d+p)]/255*b]);q.push([1,0,h[4*(m*d+p)]/255*b]);q.push([1,1,h[4*(s*d+p)]/255*b]);q.push([0,1,h[4*(s*d+l)]/255*b]);q.push([-1,1,h[4*(s*d+r)]/255*b]);n=[];r=q.length;for(s=0;se)return null;var f=[],g=[],h=[],i,k,l;if(0=m--){console.log("Warning, unable to triangulate polygon!");break}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);l=k+1;e<=l&&(l=0);var n;a:{var s=n=void 0,r=void 0,p=void 0,q=void 0,y=void 0,v=void 0,z=void 0,t= +void 0,s=a[g[i]].x,r=a[g[i]].y,p=a[g[k]].x,q=a[g[k]].y,y=a[g[l]].x,v=a[g[l]].y;if(1E-10>(p-s)*(v-r)-(q-r)*(y-s))n=!1;else{var A=void 0,I=void 0,C=void 0,x=void 0,G=void 0,J=void 0,E=void 0,H=void 0,B=void 0,W=void 0,B=H=E=t=z=void 0,A=y-p,I=v-q,C=s-y,x=r-v,G=p-s,J=q-r;for(n=0;ni)g=d+1;else if(0b&&(b=0);1d.length-2?d.length-1:a+1;c[3]=a>d.length-3?d.length-1:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b}; +THREE.EllipseCurve=function(a,b,c,d,e,f,g){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);b=this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);b=this.aY+this.yRadius*Math.sin(b);return new THREE.Vector2(a,b)}; +THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype); +THREE.Curve.Utils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){var a=0.5*(c-a),d=0.5*(d-b),f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*f+a*e+b}}; +THREE.Curve.create=function(a,b){a.prototype=Object.create(THREE.Curve.prototype);a.prototype.getPoint=b;return a};THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b}); +THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b,c;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(b,c,a)}); +THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b,c;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(b,c,a)}); +THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e,a=(d.length-1)*a;e=Math.floor(a);a-=e;c[0]=0==e?e:e-1;c[1]=e;c[2]=e>d.length-2?d.length-1:e+1;c[3]=e>d.length-3?d.length-1:e+2;e=d[c[0]];var f=d[c[1]],g=d[c[2]],c=d[c[3]];b.x=THREE.Curve.Utils.interpolate(e.x,f.x,g.x,c.x,a);b.y=THREE.Curve.Utils.interpolate(e.y,f.y,g.y,c.y,a);b.z=THREE.Curve.Utils.interpolate(e.z,f.z,g.z,c.z,a);return b}); +THREE.ClosedSplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e;e=(d.length-0)*a;a=Math.floor(e);e-=a;a+=0=b)return b=c[a]-b,a=this.curves[a],b=1-b/a.getLength(),a.getPointAt(b);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; +THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],b=0,c,d=this.curves.length;for(c=0;cb?b=h.x:h.xc?c=h.y:h.yd?d=h.z:h.zMath.abs(d.x-c[0].x)&&1E-10>Math.abs(d.y-c[0].y)&&c.splice(c.length-1,1);b&&c.push(c[0]);return c}; +THREE.Path.prototype.toShapes=function(){var a,b,c,d,e=[],f=new THREE.Path;a=0;for(b=this.actions.length;a +h&&(h+=c.length);h%=c.length;0>g&&(g+=k.length);g%=k.length;e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:k.length-1;p=[k[g],c[h],c[e]];p=THREE.FontUtils.Triangulate.area(p);q=[k[g],k[f],c[h]];q=THREE.FontUtils.Triangulate.area(q);m+n>p+q&&(h=s,g=l,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=k.length),g%=k.length,e=0<=h-1?h-1:c.length-1,f=0<=g-1?g-1:k.length-1);m=c.slice(0,h);n=c.slice(h);s=k.slice(g);l=k.slice(0,g);f=[k[g],k[f],c[h]];r.push([k[g],c[h],c[e]]);r.push(f);c=m.concat(s).concat(l).concat(n)}return{shape:c, +isolatedPts:r,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),f,g,h,i,k={};f=0;for(g=d.length;fd;d++)i=h[d].x+":"+h[d].y,i=k[i],void 0!==i&&(h[d]=i)}f=0;for(g=e.length;fd;d++)i=h[d].x+":"+h[d].y,i=k[i],void 0!==i&&(h[d]=i)}return c.concat(e)}, +isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+ +this.b3p3(a,e)}};THREE.AnimationHandler=function(){var a=[],b={},c={update:function(b){for(var c=0;ca.hierarchy[c].keys[d].time&& +(a.hierarchy[c].keys[d].time=0),void 0!==a.hierarchy[c].keys[d].rot&&!(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)){var h=a.hierarchy[c].keys[d].rot;a.hierarchy[c].keys[d].rot=new THREE.Quaternion(h[0],h[1],h[2],h[3])}if(a.hierarchy[c].keys.length&&void 0!==a.hierarchy[c].keys[0].morphTargets){h={};for(d=0;ds;s++){c=b[s];g=i.prevKey[c];h=i.nextKey[c];if(h.time<=l){if(kd||1d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+ +(f[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)this.points[0]=this.getPrevKeyWith("pos",m,g.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",m,h.index+1).pos,d=0.33*d+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD&&(d=this.interpolateCatmullRom(this.points,1.01*d), +this.target.set(d[0],d[1],d[2]),this.target.sub(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0))}else"rot"===c?THREE.Quaternion.slerp(e,f,a.quaternion,d):"scl"===c&&(c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d)}}}}; +THREE.Animation.prototype.interpolateCatmullRom=function(a,b){var c=[],d=[],e,f,g,h,i,k;e=(a.length-1)*b;f=Math.floor(e);e-=f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>a.length-2?f:f+1;c[3]=f>a.length-3?f:f+2;f=a[c[0]];h=a[c[1]];i=a[c[2]];k=a[c[3]];c=e*e;g=e*c;d[0]=this.interpolate(f[0],h[0],i[0],k[0],e,c,g);d[1]=this.interpolate(f[1],h[1],i[1],k[1],e,c,g);d[2]=this.interpolate(f[2],h[2],i[2],k[2],e,c,g);return d}; +THREE.Animation.prototype.interpolate=function(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c=g?b.interpolate(c,g):b.interpolate(c,c.time)}this.data.hierarchy[a].node.updateMatrix();d.matrixWorldNeedsUpdate=!0}}if(this.JITCompile&&void 0===f[0][e]){this.hierarchy[0].updateMatrixWorld(!0);for(a=0;ag?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).add(i).sub(a).clone()}function e(c,d){var e,f;for(M=c.length;0<=--M;){e=M;f=M-1;0>f&&(f=c.length-1);for(var g=0,i=s+2*l, +g=0;gMath.abs(c-i)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(k,1-g),new THREE.Vector2(m,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(i,1-f),new THREE.Vector2(l,1-g),new THREE.Vector2(n,1-a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2;THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2; +THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2;THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);!1===a instanceof Array&&(a=[a]);this.shapebb=a[a.length-1].getBoundingBox();this.addShapeList(a,b);this.computeCentroids();this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cd?(d=new THREE.Face3(a.index,b.index,c.index,[a.clone(),b.clone(),c.clone()]),d.centroid.add(a).add(b).add(c).divideScalar(3),d.normal=d.centroid.clone().normalize(),i.faces.push(d),d=Math.atan2(d.centroid.z,-d.centroid.x),i.faceVertexUvs[0].push([h(a.uv, +a,d),h(b.uv,b,d),h(c.uv,c,d)])):(d-=1,f(a,g(a,b),g(a,c),d),f(g(a,b),b,g(b,c),d),f(g(a,c),g(b,c),c,d),f(g(a,b),g(b,c),g(a,c),d))}function g(a,b){m[a.index]||(m[a.index]=[]);m[b.index]||(m[b.index]=[]);var c=m[a.index][b.index];void 0===c&&(m[a.index][b.index]=m[b.index][a.index]=c=e((new THREE.Vector3).addVectors(a,b).divideScalar(2)));return c}function h(a,b,c){0>c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+0.5,a.y));return a}THREE.Geometry.call(this); +for(var c=c||1,d=d||0,i=this,k=0,l=a.length;k=l){for(k=0;3>k;k++){l=[i[k],i[(k+1)%3]];m=!0;for(n=0;nh;h++)void 0===f[g[h]]&&(f[g[h]]=e++,this.vertices.push(a[g[h]])),g[h]=f[g[h]]}for(d=0;db.y?this.rotation.set(Math.PI,0,0):(a=THREE.ArrowHelper.__v2.set(b.z,0,-b.x).normalize(),b=Math.acos(b.y),a=THREE.ArrowHelper.__q1.setFromAxisAngle(a,b),this.rotation.setEulerFromQuaternion(a,this.eulerOrder))}; +THREE.ArrowHelper.prototype.setLength=function(a){this.scale.set(a,a,a)};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.setHex(a);this.cone.material.color.setHex(a)};THREE.ArrowHelper.__v1=new THREE.Vector3;THREE.ArrowHelper.__v2=new THREE.Vector3;THREE.ArrowHelper.__q1=new THREE.Quaternion;THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.geometry.vertices.push(new THREE.Vector3);d.geometry.colors.push(new THREE.Color(b));void 0===d.pointMap[a]&&(d.pointMap[a]=[]);d.pointMap[a].push(d.geometry.vertices.length-1)}THREE.Line.call(this);var d=this;this.geometry=new THREE.Geometry;this.material=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors});this.type=THREE.LinePieces;this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap= +{};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1", +"cf2",3355443);b("cf3","cf4",3355443);this.camera=a;this.update(a)};THREE.CameraHelper.prototype=Object.create(THREE.Line.prototype); +THREE.CameraHelper.prototype.update=function(){function a(a,d,e,f){THREE.CameraHelper.__v.set(d,e,f);THREE.CameraHelper.__projector.unprojectVector(THREE.CameraHelper.__v,THREE.CameraHelper.__c);a=b.pointMap[a];if(void 0!==a){d=0;for(e=a.length;dh.end&&(h.end=f);c||(c=i)}}for(i in d)h=d[i],this.createAnimation(i,h.start,h.end,a);this.firstAnimation=c}; +THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)}; +THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b}; +THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("animation["+a+"] undefined")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1}; +THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.startFrame+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight; +f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);this.morphTargetInfluences[d.currentFrame]=e*g;this.morphTargetInfluences[d.lastFrame]=(1-e)*g}}};THREE.LensFlarePlugin=function(){function a(a,c){var d=b.createProgram(),e=b.createShader(b.FRAGMENT_SHADER),f=b.createShader(b.VERTEX_SHADER),g="precision "+c+" float;\n";b.shaderSource(e,g+a.fragmentShader);b.shaderSource(f,g+a.vertexShader);b.compileShader(e);b.compileShader(f);b.attachShader(d,e);b.attachShader(d,f);b.linkProgram(d);return d}var b,c,d,e,f,g,h,i,k,l,m,n,s;this.init=function(r){b=r.context;c=r;d=r.getPrecision();e=new Float32Array(16);f=new Uint16Array(6);r=0;e[r++]=-1;e[r++]=-1; +e[r++]=0;e[r++]=0;e[r++]=1;e[r++]=-1;e[r++]=1;e[r++]=0;e[r++]=1;e[r++]=1;e[r++]=1;e[r++]=1;e[r++]=-1;e[r++]=1;e[r++]=0;e[r++]=1;r=0;f[r++]=0;f[r++]=1;f[r++]=2;f[r++]=0;f[r++]=2;f[r++]=3;g=b.createBuffer();h=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,g);b.bufferData(b.ARRAY_BUFFER,e,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);i=b.createTexture();k=b.createTexture();b.bindTexture(b.TEXTURE_2D,i);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16, +0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);b.bindTexture(b.TEXTURE_2D,k);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,16,16,0,b.RGBA,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE); +b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);0>=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(l=!1,m=a(THREE.ShaderFlares.lensFlare,d)):(l=!0,m=a(THREE.ShaderFlares.lensFlareVertexTexture,d));n={};s={};n.vertex=b.getAttribLocation(m,"position");n.uv=b.getAttribLocation(m,"uv");s.renderType=b.getUniformLocation(m,"renderType");s.map=b.getUniformLocation(m,"map");s.occlusionMap=b.getUniformLocation(m,"occlusionMap");s.opacity= +b.getUniformLocation(m,"opacity");s.color=b.getUniformLocation(m,"color");s.scale=b.getUniformLocation(m,"scale");s.rotation=b.getUniformLocation(m,"rotation");s.screenPosition=b.getUniformLocation(m,"screenPosition")};this.render=function(a,d,e,f){var a=a.__webglFlares,v=a.length;if(v){var z=new THREE.Vector3,t=f/e,A=0.5*e,I=0.5*f,C=16/f,x=new THREE.Vector2(C*t,C),G=new THREE.Vector3(1,1,0),J=new THREE.Vector2(1,1),E=s,C=n;b.useProgram(m);b.enableVertexAttribArray(n.vertex);b.enableVertexAttribArray(n.uv); +b.uniform1i(E.occlusionMap,0);b.uniform1i(E.map,1);b.bindBuffer(b.ARRAY_BUFFER,g);b.vertexAttribPointer(C.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(C.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.disable(b.CULL_FACE);b.depthMask(!1);var H,B,W,F,K;for(H=0;Hx;x++)t[x]=new THREE.Vector3,v[x]=new THREE.Vector3;t=A.shadowCascadeNearZ[z];A=A.shadowCascadeFarZ[z];v[0].set(-1,-1,t);v[1].set(1,-1,t);v[2].set(-1, +1,t);v[3].set(1,1,t);v[4].set(-1,-1,A);v[5].set(1,-1,A);v[6].set(-1,1,A);v[7].set(1,1,A);C.originalCamera=n;v=new THREE.Gyroscope;v.position=p.shadowCascadeOffset;v.add(C);v.add(C.target);n.add(v);p.shadowCascadeArray[y]=C;console.log("Created virtualLight",C)}z=p;t=y;A=z.shadowCascadeArray[t];A.position.copy(z.position);A.target.position.copy(z.target.position);A.lookAt(A.target);A.shadowCameraVisible=z.shadowCameraVisible;A.shadowDarkness=z.shadowDarkness;A.shadowBias=z.shadowCascadeBias[t];v=z.shadowCascadeNearZ[t]; +z=z.shadowCascadeFarZ[t];A=A.pointsFrustum;A[0].z=v;A[1].z=v;A[2].z=v;A[3].z=v;A[4].z=z;A[5].z=z;A[6].z=z;A[7].z=z;I[q]=C;q++}else I[q]=p,q++;s=0;for(r=I.length;sz;z++)t=A[z],t.copy(v[z]),THREE.ShadowMapPlugin.__projector.unprojectVector(t,y),t.applyMatrix4(q.matrixWorldInverse),t.xk.x&&(k.x=t.x),t.yk.y&&(k.y=t.y),t.zk.z&& +(k.z=t.z);q.left=i.x;q.right=k.x;q.top=k.y;q.bottom=i.y;q.updateProjectionMatrix()}q=p.shadowMap;v=p.shadowMatrix;y=p.shadowCamera;y.position.getPositionFromMatrix(p.matrixWorld);l.getPositionFromMatrix(p.target.matrixWorld);y.lookAt(l);y.updateMatrixWorld();y.matrixWorldInverse.getInverse(y.matrixWorld);p.cameraHelper&&(p.cameraHelper.visible=p.shadowCameraVisible);p.shadowCameraVisible&&p.cameraHelper.update();v.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);v.multiply(y.projectionMatrix);v.multiply(y.matrixWorldInverse); +h.multiplyMatrices(y.projectionMatrix,y.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(q);b.clear();A=m.__webglObjects;p=0;for(q=A.length;p 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"}}; diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/.bower.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/.bower.json new file mode 100644 index 0000000000..da4c86c4b9 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/.bower.json @@ -0,0 +1,47 @@ +{ + "name": "bootstrap", + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "version": "3.2.0", + "keywords": [ + "css", + "js", + "less", + "mobile-first", + "responsive", + "front-end", + "framework", + "web" + ], + "homepage": "http://getbootstrap.com", + "main": [ + "less/bootstrap.less", + "dist/css/bootstrap.css", + "dist/js/bootstrap.js", + "dist/fonts/glyphicons-halflings-regular.eot", + "dist/fonts/glyphicons-halflings-regular.svg", + "dist/fonts/glyphicons-halflings-regular.ttf", + "dist/fonts/glyphicons-halflings-regular.woff" + ], + "ignore": [ + ".*", + "_config.yml", + "CNAME", + "composer.json", + "CONTRIBUTING.md", + "docs", + "js/tests", + "test-infra" + ], + "dependencies": { + "jquery": ">= 1.9.0" + }, + "_release": "3.2.0", + "_resolution": { + "type": "version", + "tag": "v3.2.0", + "commit": "c068162161154a4b85110ea1e7dd3d7897ce2b72" + }, + "_source": "git://github.com/twbs/bootstrap.git", + "_target": ">=2.3.2", + "_originalSource": "bootstrap" +} \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/Gruntfile.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/Gruntfile.js new file mode 100644 index 0000000000..66e1de36ee --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/Gruntfile.js @@ -0,0 +1,480 @@ +/*! + * Bootstrap's Gruntfile + * http://getbootstrap.com + * Copyright 2013-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +module.exports = function (grunt) { + 'use strict'; + + // Force use of Unix newlines + grunt.util.linefeed = '\n'; + + RegExp.quote = function (string) { + return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); + }; + + var fs = require('fs'); + var path = require('path'); + var npmShrinkwrap = require('npm-shrinkwrap'); + var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js'); + var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js'); + var generateRawFiles = require('./grunt/bs-raw-files-generator.js'); + + // Project configuration. + grunt.initConfig({ + + // Metadata. + pkg: grunt.file.readJSON('package.json'), + banner: '/*!\n' + + ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' + + ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + + ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' + + ' */\n', + // NOTE: This jqueryCheck code is duplicated in customizer.js; if making changes here, be sure to update the other copy too. + jqueryCheck: 'if (typeof jQuery === \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n', + + // Task configuration. + clean: { + dist: ['dist', 'docs/dist'] + }, + + jshint: { + options: { + jshintrc: 'js/.jshintrc' + }, + grunt: { + options: { + jshintrc: 'grunt/.jshintrc' + }, + src: ['Gruntfile.js', 'grunt/*.js'] + }, + src: { + src: 'js/*.js' + }, + test: { + options: { + jshintrc: 'js/tests/unit/.jshintrc' + }, + src: 'js/tests/unit/*.js' + }, + assets: { + src: ['docs/assets/js/_src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js'] + } + }, + + jscs: { + options: { + config: 'js/.jscsrc' + }, + grunt: { + src: '<%= jshint.grunt.src %>' + }, + src: { + src: '<%= jshint.src.src %>' + }, + test: { + src: '<%= jshint.test.src %>' + }, + assets: { + options: { + requireCamelCaseOrUpperCaseIdentifiers: null + }, + src: '<%= jshint.assets.src %>' + } + }, + + concat: { + options: { + banner: '<%= banner %>\n<%= jqueryCheck %>', + stripBanners: false + }, + bootstrap: { + src: [ + 'js/transition.js', + 'js/alert.js', + 'js/button.js', + 'js/carousel.js', + 'js/collapse.js', + 'js/dropdown.js', + 'js/modal.js', + 'js/tooltip.js', + 'js/popover.js', + 'js/scrollspy.js', + 'js/tab.js', + 'js/affix.js' + ], + dest: 'dist/js/<%= pkg.name %>.js' + } + }, + + uglify: { + options: { + preserveComments: 'some' + }, + bootstrap: { + src: '<%= concat.bootstrap.dest %>', + dest: 'dist/js/<%= pkg.name %>.min.js' + }, + customize: { + src: [ + 'docs/assets/js/_vendor/less.min.js', + 'docs/assets/js/_vendor/jszip.min.js', + 'docs/assets/js/_vendor/uglify.min.js', + 'docs/assets/js/_vendor/blob.js', + 'docs/assets/js/_vendor/filesaver.js', + 'docs/assets/js/raw-files.min.js', + 'docs/assets/js/_src/customizer.js' + ], + dest: 'docs/assets/js/customize.min.js' + }, + docsJs: { + src: [ + 'docs/assets/js/_vendor/holder.js', + 'docs/assets/js/_vendor/ZeroClipboard.min.js', + 'docs/assets/js/_src/application.js' + ], + dest: 'docs/assets/js/docs.min.js' + } + }, + + qunit: { + options: { + inject: 'js/tests/unit/phantom.js' + }, + files: 'js/tests/index.html' + }, + + less: { + compileCore: { + options: { + strictMath: true, + sourceMap: true, + outputSourceFiles: true, + sourceMapURL: '<%= pkg.name %>.css.map', + sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map' + }, + files: { + 'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less' + } + }, + compileTheme: { + options: { + strictMath: true, + sourceMap: true, + outputSourceFiles: true, + sourceMapURL: '<%= pkg.name %>-theme.css.map', + sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map' + }, + files: { + 'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less' + } + } + }, + + autoprefixer: { + options: { + browsers: [ + 'Android 2.3', + 'Android >= 4', + 'Chrome >= 20', + 'Firefox >= 24', // Firefox 24 is the latest ESR + 'Explorer >= 8', + 'iOS >= 6', + 'Opera >= 12', + 'Safari >= 6' + ] + }, + core: { + options: { + map: true + }, + src: 'dist/css/<%= pkg.name %>.css' + }, + theme: { + options: { + map: true + }, + src: 'dist/css/<%= pkg.name %>-theme.css' + }, + docs: { + src: 'docs/assets/css/_src/docs.css' + }, + examples: { + expand: true, + cwd: 'docs/examples/', + src: ['**/*.css'], + dest: 'docs/examples/' + } + }, + + csslint: { + options: { + csslintrc: 'less/.csslintrc' + }, + src: [ + 'dist/css/bootstrap.css', + 'dist/css/bootstrap-theme.css' + ], + examples: [ + 'docs/examples/**/*.css' + ], + docs: { + options: { + ids: false, + 'overqualified-elements': false + }, + src: 'docs/assets/css/_src/docs.css' + } + }, + + cssmin: { + options: { + compatibility: 'ie8', + keepSpecialComments: '*', + noAdvanced: true + }, + core: { + files: { + 'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css', + 'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css' + } + }, + docs: { + src: [ + 'docs/assets/css/_src/docs.css', + 'docs/assets/css/_src/pygments-manni.css' + ], + dest: 'docs/assets/css/docs.min.css' + } + }, + + usebanner: { + options: { + position: 'top', + banner: '<%= banner %>' + }, + files: { + src: 'dist/css/*.css' + } + }, + + csscomb: { + options: { + config: 'less/.csscomb.json' + }, + dist: { + expand: true, + cwd: 'dist/css/', + src: ['*.css', '!*.min.css'], + dest: 'dist/css/' + }, + examples: { + expand: true, + cwd: 'docs/examples/', + src: '**/*.css', + dest: 'docs/examples/' + }, + docs: { + files: { + 'docs/assets/css/_src/docs.css': 'docs/assets/css/_src/docs.css' + } + } + }, + + copy: { + fonts: { + expand: true, + src: 'fonts/*', + dest: 'dist/' + }, + docs: { + expand: true, + cwd: './dist', + src: [ + '{css,js}/*.min.*', + 'css/*.map', + 'fonts/*' + ], + dest: 'docs/dist' + } + }, + + connect: { + server: { + options: { + port: 3000, + base: '.' + } + } + }, + + jekyll: { + docs: {} + }, + + jade: { + compile: { + options: { + pretty: true, + data: function () { + var filePath = path.join(__dirname, 'less/variables.less'); + var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' }); + var parser = new BsLessdocParser(fileContent); + return { sections: parser.parseFile() }; + } + }, + files: { + 'docs/_includes/customizer-variables.html': 'docs/_jade/customizer-variables.jade', + 'docs/_includes/nav/customize.html': 'docs/_jade/customizer-nav.jade' + } + } + }, + + validation: { + options: { + charset: 'utf-8', + doctype: 'HTML5', + failHard: true, + reset: true, + relaxerror: [ + 'Bad value X-UA-Compatible for attribute http-equiv on element meta.', + 'Element img is missing required attribute src.' + ] + }, + files: { + src: '_gh_pages/**/*.html' + } + }, + + watch: { + src: { + files: '<%= jshint.src.src %>', + tasks: ['jshint:src', 'qunit'] + }, + test: { + files: '<%= jshint.test.src %>', + tasks: ['jshint:test', 'qunit'] + }, + less: { + files: 'less/*.less', + tasks: 'less' + } + }, + + sed: { + versionNumber: { + pattern: (function () { + var old = grunt.option('oldver'); + return old ? RegExp.quote(old) : old; + })(), + replacement: grunt.option('newver'), + recursive: true + } + }, + + 'saucelabs-qunit': { + all: { + options: { + build: process.env.TRAVIS_JOB_ID, + concurrency: 10, + maxRetries: 3, + urls: ['http://127.0.0.1:3000/js/tests/index.html'], + browsers: grunt.file.readYAML('grunt/sauce_browsers.yml') + } + } + }, + + exec: { + npmUpdate: { + command: 'npm update' + } + } + }); + + + // These plugins provide necessary tasks. + require('load-grunt-tasks')(grunt, { scope: 'devDependencies' }); + require('time-grunt')(grunt); + + // Docs HTML validation task + grunt.registerTask('validate-html', ['jekyll', 'validation']); + + var runSubset = function (subset) { + return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset; + }; + var isUndefOrNonZero = function (val) { + return val === undefined || val !== '0'; + }; + + // Test task. + var testSubtasks = []; + // Skip core tests if running a different subset of the test suite + if (runSubset('core')) { + testSubtasks = testSubtasks.concat(['dist-css', 'csslint', 'jshint', 'jscs', 'qunit', 'build-customizer-html']); + } + // Skip HTML validation if running a different subset of the test suite + if (runSubset('validate-html') && + // Skip HTML5 validator on Travis when [skip validator] is in the commit message + isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) { + testSubtasks.push('validate-html'); + } + // Only run Sauce Labs tests if there's a Sauce access key + if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' && + // Skip Sauce if running a different subset of the test suite + runSubset('sauce-js-unit') && + // Skip Sauce on Travis when [skip sauce] is in the commit message + isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) { + testSubtasks.push('connect'); + testSubtasks.push('saucelabs-qunit'); + } + grunt.registerTask('test', testSubtasks); + + // JS distribution task. + grunt.registerTask('dist-js', ['concat', 'uglify']); + + // CSS distribution task. + grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']); + grunt.registerTask('dist-css', ['less-compile', 'autoprefixer', 'usebanner', 'csscomb', 'cssmin']); + + // Docs distribution task. + grunt.registerTask('dist-docs', 'copy:docs'); + + // Full distribution task. + grunt.registerTask('dist', ['clean', 'dist-css', 'copy:fonts', 'dist-js', 'dist-docs']); + + // Default task. + grunt.registerTask('default', ['test', 'dist', 'build-glyphicons-data', 'build-customizer']); + + // Version numbering task. + // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z + // This can be overzealous, so its changes should always be manually reviewed! + grunt.registerTask('change-version-number', 'sed'); + + grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); }); + + // task for building customizer + grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']); + grunt.registerTask('build-customizer-html', 'jade'); + grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () { + var banner = grunt.template.process('<%= banner %>'); + generateRawFiles(grunt, banner); + }); + + // Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json). + // This task should be run and the updated file should be committed whenever Bootstrap's dependencies change. + grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']); + grunt.registerTask('_update-shrinkwrap', function () { + var done = this.async(); + npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) { + if (err) { + grunt.fail.warn(err) + } + var dest = 'test-infra/npm-shrinkwrap.json'; + fs.renameSync('npm-shrinkwrap.json', dest); + grunt.log.writeln('File ' + dest.cyan + ' updated.'); + done(); + }); + }); +}; diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/LICENSE b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/LICENSE new file mode 100644 index 0000000000..8d94aa9ac9 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2011-2014 Twitter, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/README.md b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/README.md new file mode 100644 index 0000000000..82c4a17b86 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/README.md @@ -0,0 +1,127 @@ +# [Bootstrap](http://getbootstrap.com) +[![Bower version](https://badge.fury.io/bo/bootstrap.svg)](http://badge.fury.io/bo/bootstrap) +[![NPM version](https://badge.fury.io/js/bootstrap.svg)](http://badge.fury.io/js/bootstrap) +[![Build Status](https://secure.travis-ci.org/twbs/bootstrap.svg?branch=master)](http://travis-ci.org/twbs/bootstrap) +[![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies) +[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap) + +Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat), and maintained by the [core team](https://github.com/twbs?tab=members) with the massive support and involvement of the community. + +To get started, check out ! + +## Table of contents + + - [Quick start](#quick-start) + - [Bugs and feature requests](#bugs-and-feature-requests) + - [Documentation](#documentation) + - [Contributing](#contributing) + - [Community](#community) + - [Versioning](#versioning) + - [Creators](#creators) + - [Copyright and license](#copyright-and-license) + +## Quick start + +Three quick start options are available: + +- [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.2.0.zip). +- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`. +- Install with [Bower](http://bower.io): `bower install bootstrap`. + +Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more. + +### What's included + +Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this: + +``` +bootstrap/ +├── css/ +│ ├── bootstrap.css +│ ├── bootstrap.min.css +│ ├── bootstrap-theme.css +│ └── bootstrap-theme.min.css +├── js/ +│ ├── bootstrap.js +│ └── bootstrap.min.js +└── fonts/ + ├── glyphicons-halflings-regular.eot + ├── glyphicons-halflings-regular.svg + ├── glyphicons-halflings-regular.ttf + └── glyphicons-halflings-regular.woff +``` + +We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). Fonts from Glyphicons are included, as is the optional Bootstrap theme. + + + +## Bugs and feature requests + +Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new). + + +## Documentation + +Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at . The docs may also be run locally. + +### Running documentation locally + +1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v2.0.x). + - **Windows users:** Read [this unofficial guide](https://github.com/juthilo/run-jekyll-on-windows/) to get Jekyll up and running without problems. We use Pygments for syntax highlighting, so make sure to read the sections on installing Python and Pygments. +2. From the root `/bootstrap` directory, run `jekyll serve` in the command line. +3. Open in your browser, and voilà. + +Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/). + +### Documentation for previous releases + +Documentation for v2.3.2 has been made available for the time being at while folks transition to Bootstrap 3. + +[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. + + + +## Contributing + +Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. + +Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo). + +Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at . + + + +## Community + +Keep track of development and community news. + +- Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap). +- Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com). +- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel. +- Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](http://stackoverflow.com/questions/tagged/twitter-bootstrap-3)). + + + +## Versioning + +For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible. + + + +## Creators + +**Mark Otto** + +- +- + +**Jacob Thornton** + +- +- + + + +## Copyright and license + +Code and documentation copyright 2011-2014 Twitter, Inc. Code released under [the MIT license](LICENSE). Docs released under [Creative Commons](docs/LICENSE). diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/bower.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/bower.json new file mode 100644 index 0000000000..eaf768a711 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/bower.json @@ -0,0 +1,38 @@ +{ + "name": "bootstrap", + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "version": "3.2.0", + "keywords": [ + "css", + "js", + "less", + "mobile-first", + "responsive", + "front-end", + "framework", + "web" + ], + "homepage": "http://getbootstrap.com", + "main": [ + "less/bootstrap.less", + "dist/css/bootstrap.css", + "dist/js/bootstrap.js", + "dist/fonts/glyphicons-halflings-regular.eot", + "dist/fonts/glyphicons-halflings-regular.svg", + "dist/fonts/glyphicons-halflings-regular.ttf", + "dist/fonts/glyphicons-halflings-regular.woff" + ], + "ignore": [ + ".*", + "_config.yml", + "CNAME", + "composer.json", + "CONTRIBUTING.md", + "docs", + "js/tests", + "test-infra" + ], + "dependencies": { + "jquery": ">= 1.9.0" + } +} diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.css b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.css new file mode 100644 index 0000000000..f860bbc069 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.css @@ -0,0 +1,442 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default:disabled, +.btn-default[disabled] { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2)); + background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #2b669a; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #2d6ca2; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #2d6ca2; + border-color: #2b669a; +} +.btn-primary:disabled, +.btn-primary[disabled] { + background-color: #2d6ca2; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success:disabled, +.btn-success[disabled] { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info:disabled, +.btn-info[disabled] { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning:disabled, +.btn-warning[disabled] { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger:disabled, +.btn-danger[disabled] { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #357ebd; + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; +} +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); + background-image: -o-linear-gradient(top, #222 0%, #282828 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828)); + background-image: linear-gradient(to bottom, #222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9)); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #3071a9; + background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3)); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + background-repeat: repeat-x; + border-color: #3278b3; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.css.map b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.css.map new file mode 100644 index 0000000000..4cc41ab001 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"file":"bootstrap-theme.css","sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",null,"// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.min.css b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.min.css new file mode 100644 index 0000000000..2e97597c87 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap-theme.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.css b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.css new file mode 100644 index 0000000000..037dd05615 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.css @@ -0,0 +1,6203 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="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; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #428bca; + text-decoration: none; +} +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + width: 100% \9; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + width: 100% \9; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +cite { + font-style: normal; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #428bca; +} +a.text-primary:hover { + color: #3071a9; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #428bca; +} +a.bg-primary:hover { + background-color: #3071a9; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +blockquote:before, +blockquote:after { + content: ""; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) > 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 col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: auto; + overflow-y: hidden; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #777; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #777; +} +.form-control::-webkit-input-placeholder { + color: #777; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 34px; + line-height: 1.42857143 \0; +} +input[type="date"].input-sm, +input[type="time"].input-sm, +input[type="datetime-local"].input-sm, +input[type="month"].input-sm { + line-height: 30px; +} +input[type="date"].input-lg, +input[type="time"].input-lg, +input[type="datetime-local"].input-lg, +input[type="month"].input-lg { + line-height: 46px; +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + min-height: 20px; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm, +.form-horizontal .form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.input-lg, +.form-horizontal .form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 25px; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + top: 0; + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #428bca; + border-color: #357ebd; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #3071a9; + border-color: #285e8e; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} +.btn-primary .badge { + color: #428bca; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height .35s ease; + -o-transition: height .35s ease; + transition: height .35s ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #428bca; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px solid; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: 0; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + filter: alpha(opacity=0); + opacity: 0; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #428bca; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #428bca; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } + .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-form.navbar-right:last-child { + margin-right: -15px; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } + .navbar-text.navbar-right:last-child { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #777; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #777; +} +.navbar-inverse .navbar-nav > li > a { + color: #777; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #777; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #777; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #428bca; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #2a6496; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #428bca; + border-color: #428bca; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #428bca; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #fff; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #428bca; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar[aria-valuenow="1"], +.progress-bar[aria-valuenow="2"] { + min-width: 30px; +} +.progress-bar[aria-valuenow="0"] { + min-width: 30px; + color: #777; + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media, +.media-body { + overflow: hidden; + 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 { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +a.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +a.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #428bca; + border-color: #428bca; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #428bca; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #428bca; + border-color: #428bca; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #428bca; +} +.panel-primary > .panel-heading .badge { + color: #428bca; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #428bca; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate3d(0, -25%, 0); + -o-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); +} +.modal.in .modal-dialog { + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-size: 12px; + line-height: 1.4; + visibility: visible; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.css.map b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.css.map new file mode 100644 index 0000000000..bfb5616891 --- /dev/null +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/dist/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"file":"bootstrap.css","sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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;EAAW,kBAAA;EHoR9C;AGnRmC;EAAW,kBAAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EAAW,kBAAA;EHgjB9C;AG/iBmC;EAAW,kBAAA;EHkjB9C;AGjjBmC;EAAW,kBAAA;EHojB9C;AGnjBmC;EAAW,kBAAA;EHsjB9C;AGrjBmC;EAAW,kBAAA;EHwjB9C;AGvjBmC;EAAW,kBAAA;EH0jB9C;AGzjBmC;EAAW,kBAAA;EH4jB9C;AG3jBmC;EAAW,kBAAA;EH8jB9C;AG7jBmC;EAAW,kBAAA;EHgkB9C;AG/jBmC;EAAW,kBAAA;EHkkB9C;AGjkBmC;EAAW,kBAAA;EHokB9C;AGnkBmC;EAAW,kBAAA;EHskB9C;AGrkBmC;EAAW,kBAAA;EHwkB9C;AGvkBmC;EAAW,kBAAA;EH0kB9C;AGzkBmC;EAAW,kBAAA;EH4kB9C;AG3kBmC;EAAW,kBAAA;EH8kB9C;AG7kBmC;EAAW,kBAAA;EHglB9C;AG/kBmC;EAAW,kBAAA;EHklB9C;AGjlBmC;EAAW,kBAAA;EHolB9C;AGnlBmC;EAAW,kBAAA;EHslB9C;AGrlBmC;EAAW,kBAAA;EHwlB9C;AGvlBmC;EAAW,kBAAA;EH0lB9C;AGzlBmC;EAAW,kBAAA;EH4lB9C;AG3lBmC;EAAW,kBAAA;EH8lB9C;AG7lBmC;EAAW,kBAAA;EHgmB9C;AG/lBmC;EAAW,kBAAA;EHkmB9C;AGjmBmC;EAAW,kBAAA;EHomB9C;AGnmBmC;EAAW,kBAAA;EHsmB9C;AGrmBmC;EAAW,kBAAA;EHwmB9C;AGvmBmC;EAAW,kBAAA;EH0mB9C;AGzmBmC;EAAW,kBAAA;EH4mB9C;AG3mBmC;EAAW,kBAAA;EH8mB9C;AG7mBmC;EAAW,kBAAA;EHgnB9C;AG/mBmC;EAAW,kBAAA;EHknB9C;AGjnBmC;EAAW,kBAAA;EHonB9C;AGnnBmC;EAAW,kBAAA;EHsnB9C;AGrnBmC;EAAW,kBAAA;EHwnB9C;AGvnBmC;EAAW,kBAAA;EH0nB9C;AIx1BD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL2xBT;AI11BD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELiyBT;AIx1BD;EACE,iBAAA;EACA,+CAAA;EJ01BD;AIv1BD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJy1BD;AIr1BD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJu1BD;AIj1BD;EACE,gBAAA;EACA,uBAAA;EJm1BD;AIj1BC;;EAEE,gBAAA;EACA,4BAAA;EJm1BH;AIh1BC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENu4BD;AI10BD;EACE,WAAA;EJ40BD;AIt0BD;EACE,wBAAA;EJw0BD;AIp0BD;;;;;EGvEE,gBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPk5BD;AIz0BD;EACE,oBAAA;EJ20BD;AIr0BD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC0FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEpLR,uBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPm6BD;AIt0BD;EACE,oBAAA;EJw0BD;AIl0BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJo0BD;AI5zBD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ8zBD;AItzBC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJwzBH;AQn8BD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+8BD;AQp9BD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERq+BH;AQj+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERs+BD;AQ1+BD;;;;;;;;;;;;EAQI,gBAAA;ERg/BH;AQ7+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERk/BD;AQt/BD;;;;;;;;;;;;EAQI,gBAAA;ER4/BH;AQx/BD;;EAAU,iBAAA;ER4/BT;AQ3/BD;;EAAU,iBAAA;ER+/BT;AQ9/BD;;EAAU,iBAAA;ERkgCT;AQjgCD;;EAAU,iBAAA;ERqgCT;AQpgCD;;EAAU,iBAAA;ERwgCT;AQvgCD;;EAAU,iBAAA;ER2gCT;AQrgCD;EACE,kBAAA;ERugCD;AQpgCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERsgCD;AQjgCD;EAAA;IAFI,iBAAA;IRugCD;EACF;AQ//BD;;EAEE,gBAAA;ERigCD;AQ7/BD;EACE,oBAAA;ER+/BD;AQ5/BD;;EAEE,2BAAA;EACA,eAAA;ER8/BD;AQ1/BD;EAAuB,kBAAA;ER6/BtB;AQ5/BD;EAAuB,mBAAA;ER+/BtB;AQ9/BD;EAAuB,oBAAA;ERigCtB;AQhgCD;EAAuB,qBAAA;ERmgCtB;AQlgCD;EAAuB,qBAAA;ERqgCtB;AQlgCD;EAAuB,2BAAA;ERqgCtB;AQpgCD;EAAuB,2BAAA;ERugCtB;AQtgCD;EAAuB,4BAAA;ERygCtB;AQtgCD;EACE,gBAAA;ERwgCD;AQtgCD;EC1GE,gBAAA;ETmnCD;ASlnCC;EACE,gBAAA;ETonCH;AQzgCD;EC7GE,gBAAA;ETynCD;ASxnCC;EACE,gBAAA;ET0nCH;AQ5gCD;EChHE,gBAAA;ET+nCD;AS9nCC;EACE,gBAAA;ETgoCH;AQ/gCD;ECnHE,gBAAA;ETqoCD;ASpoCC;EACE,gBAAA;ETsoCH;AQlhCD;ECtHE,gBAAA;ET2oCD;AS1oCC;EACE,gBAAA;ET4oCH;AQjhCD;EAGE,aAAA;EEhIA,2BAAA;EVkpCD;AUjpCC;EACE,2BAAA;EVmpCH;AQlhCD;EEnIE,2BAAA;EVwpCD;AUvpCC;EACE,2BAAA;EVypCH;AQrhCD;EEtIE,2BAAA;EV8pCD;AU7pCC;EACE,2BAAA;EV+pCH;AQxhCD;EEzIE,2BAAA;EVoqCD;AUnqCC;EACE,2BAAA;EVqqCH;AQ3hCD;EE5IE,2BAAA;EV0qCD;AUzqCC;EACE,2BAAA;EV2qCH;AQzhCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER2hCD;AQnhCD;;EAEE,eAAA;EACA,qBAAA;ERqhCD;AQxhCD;;;;EAMI,kBAAA;ERwhCH;AQjhCD;EACE,iBAAA;EACA,kBAAA;ERmhCD;AQ/gCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERkhCD;AQphCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERkhCH;AQ7gCD;EACE,eAAA;EACA,qBAAA;ER+gCD;AQ7gCD;;EAEE,yBAAA;ER+gCD;AQ7gCD;EACE,mBAAA;ER+gCD;AQ7gCD;EACE,gBAAA;ER+gCD;AQt/BD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IG3NJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IXguCC;EQhgCH;IAHM,oBAAA;IRsgCH;EACF;AQ7/BD;;EAGE,cAAA;EACA,mCAAA;ER8/BD;AQ5/BD;EACE,gBAAA;EACA,2BAAA;ER8/BD;AQ1/BD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER4/BD;AQv/BG;;;EACE,kBAAA;ER2/BL;AQrgCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERu/BH;AQr/BG;;;EACE,wBAAA;ERy/BL;AQj/BD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERm/BD;AQ7+BG;;;;;;EAAW,aAAA;ERq/Bd;AQp/BG;;;;;;EACE,wBAAA;ER2/BL;AQr/BD;;EAEE,aAAA;ERu/BD;AQn/BD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERq/BD;AYtyCD;;;;EAIE,gEAAA;EZwyCD;AYpyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZsyCD;AYlyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;EAAA,gDAAA;EZoyCD;AY1yCD;EASI,YAAA;EACA,iBAAA;EACA,0BAAA;EAAA,kBAAA;EZoyCH;AY/xCD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZiyCD;AY5yCD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZgyCH;AY3xCD;EACE,mBAAA;EACA,oBAAA;EZ6xCD;Aat1CD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed41CD;Aat1CC;EAAA;IAFE,cAAA;Ib41CD;EACF;Aax1CC;EAAA;IAFE,cAAA;Ib81CD;EACF;Aa11CD;EAAA;IAFI,eAAA;Ibg2CD;EACF;Aav1CD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Edi3CD;Aap1CD;ECvBE,oBAAA;EACA,qBAAA;Ed82CD;Ae92CG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;Ef82CL;Ae91CG;EACE,aAAA;Efg2CL;Aez1CC;EACE,aAAA;Ef21CH;Ae51CC;EACE,qBAAA;Ef81CH;Ae/1CC;EACE,qBAAA;Efi2CH;Ael2CC;EACE,YAAA;Efo2CH;Aer2CC;EACE,qBAAA;Efu2CH;Aex2CC;EACE,qBAAA;Ef02CH;Ae32CC;EACE,YAAA;Ef62CH;Ae92CC;EACE,qBAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,YAAA;Efs3CH;Aev3CC;EACE,qBAAA;Efy3CH;Ae13CC;EACE,oBAAA;Ef43CH;Ae92CC;EACE,aAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,qBAAA;Efs3CH;Aev3CC;EACE,YAAA;Efy3CH;Ae13CC;EACE,qBAAA;Ef43CH;Ae73CC;EACE,qBAAA;Ef+3CH;Aeh4CC;EACE,YAAA;Efk4CH;Aen4CC;EACE,qBAAA;Efq4CH;Aet4CC;EACE,qBAAA;Efw4CH;Aez4CC;EACE,YAAA;Ef24CH;Ae54CC;EACE,qBAAA;Ef84CH;Ae/4CC;EACE,oBAAA;Efi5CH;Ae74CC;EACE,aAAA;Ef+4CH;Ae/5CC;EACE,YAAA;Efi6CH;Ael6CC;EACE,oBAAA;Efo6CH;Aer6CC;EACE,oBAAA;Efu6CH;Aex6CC;EACE,WAAA;Ef06CH;Ae36CC;EACE,oBAAA;Ef66CH;Ae96CC;EACE,oBAAA;Efg7CH;Aej7CC;EACE,WAAA;Efm7CH;Aep7CC;EACE,oBAAA;Efs7CH;Aev7CC;EACE,oBAAA;Efy7CH;Ae17CC;EACE,WAAA;Ef47CH;Ae77CC;EACE,oBAAA;Ef+7CH;Aeh8CC;EACE,mBAAA;Efk8CH;Ae97CC;EACE,YAAA;Efg8CH;Ael7CC;EACE,mBAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,2BAAA;Ef07CH;Ae37CC;EACE,kBAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,2BAAA;Efm8CH;Aep8CC;EACE,kBAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,2BAAA;Ef48CH;Ae78CC;EACE,kBAAA;Ef+8CH;Aeh9CC;EACE,2BAAA;Efk9CH;Aen9CC;EACE,0BAAA;Efq9CH;Aet9CC;EACE,iBAAA;Efw9CH;Aa59CD;EE9BI;IACE,aAAA;If6/CH;Eet/CD;IACE,aAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,qBAAA;If8/CD;Ee//CD;IACE,YAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,qBAAA;IfugDD;EexgDD;IACE,YAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,oBAAA;IfyhDD;Ee3gDD;IACE,aAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,YAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,qBAAA;If4hDD;Ee7hDD;IACE,YAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,qBAAA;IfqiDD;EetiDD;IACE,YAAA;IfwiDD;EeziDD;IACE,qBAAA;If2iDD;Ee5iDD;IACE,oBAAA;If8iDD;Ee1iDD;IACE,aAAA;If4iDD;Ee5jDD;IACE,YAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,oBAAA;IfokDD;EerkDD;IACE,WAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,oBAAA;If6kDD;Ee9kDD;IACE,WAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,oBAAA;IfslDD;EevlDD;IACE,WAAA;IfylDD;Ee1lDD;IACE,oBAAA;If4lDD;Ee7lDD;IACE,mBAAA;If+lDD;Ee3lDD;IACE,YAAA;If6lDD;Ee/kDD;IACE,mBAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,2BAAA;IfulDD;EexlDD;IACE,kBAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,2BAAA;IfgmDD;EejmDD;IACE,kBAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,2BAAA;IfymDD;Ee1mDD;IACE,kBAAA;If4mDD;Ee7mDD;IACE,2BAAA;If+mDD;EehnDD;IACE,0BAAA;IfknDD;EennDD;IACE,iBAAA;IfqnDD;EACF;AajnDD;EEvCI;IACE,aAAA;If2pDH;EeppDD;IACE,aAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,qBAAA;If4pDD;Ee7pDD;IACE,YAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,qBAAA;IfqqDD;EetqDD;IACE,YAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,oBAAA;IfurDD;EezqDD;IACE,aAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,YAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,qBAAA;If0rDD;Ee3rDD;IACE,YAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,qBAAA;IfmsDD;EepsDD;IACE,YAAA;IfssDD;EevsDD;IACE,qBAAA;IfysDD;Ee1sDD;IACE,oBAAA;If4sDD;EexsDD;IACE,aAAA;If0sDD;Ee1tDD;IACE,YAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,oBAAA;IfkuDD;EenuDD;IACE,WAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,oBAAA;If2uDD;Ee5uDD;IACE,WAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,oBAAA;IfovDD;EervDD;IACE,WAAA;IfuvDD;EexvDD;IACE,oBAAA;If0vDD;Ee3vDD;IACE,mBAAA;If6vDD;EezvDD;IACE,YAAA;If2vDD;Ee7uDD;IACE,mBAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,2BAAA;IfqvDD;EetvDD;IACE,kBAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,2BAAA;If8vDD;Ee/vDD;IACE,kBAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,2BAAA;IfuwDD;EexwDD;IACE,kBAAA;If0wDD;Ee3wDD;IACE,2BAAA;If6wDD;Ee9wDD;IACE,0BAAA;IfgxDD;EejxDD;IACE,iBAAA;IfmxDD;EACF;AaxwDD;EE9CI;IACE,aAAA;IfyzDH;EelzDD;IACE,aAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,qBAAA;If0zDD;Ee3zDD;IACE,YAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,qBAAA;Ifm0DD;Eep0DD;IACE,YAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,oBAAA;Ifq1DD;Eev0DD;IACE,aAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,YAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,qBAAA;Ifw1DD;Eez1DD;IACE,YAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,qBAAA;Ifi2DD;Eel2DD;IACE,YAAA;Ifo2DD;Eer2DD;IACE,qBAAA;Ifu2DD;Eex2DD;IACE,oBAAA;If02DD;Eet2DD;IACE,aAAA;Ifw2DD;Eex3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AAA;EACI,uBAAA;ErBqsFT;AoB9qFD;EClBI,gBAAA;EACA,2BAAA;ErBmsFH;AoB/qFD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuuFD;AqBruFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuuFP;AqBruFC;;;EAGE,wBAAA;ErBuuFH;AqBluFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErB8uFT;AoBptFD;ECrBI,gBAAA;EACA,2BAAA;ErB4uFH;AoBptFD;ECzDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBgxFD;AqB9wFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBgxFP;AqB9wFC;;;EAGE,wBAAA;ErBgxFH;AqB3wFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBuxFT;AoBzvFD;ECzBI,gBAAA;EACA,2BAAA;ErBqxFH;AoBzvFD;EC7DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBg0FT;AoB9xFD;EC7BI,gBAAA;EACA,2BAAA;ErB8zFH;AoB9xFD;ECjEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBk2FD;AqBh2FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBk2FP;AqBh2FC;;;EAGE,wBAAA;ErBk2FH;AqB71FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBy2FT;AoBn0FD;ECjCI,gBAAA;EACA,2BAAA;ErBu2FH;AoBn0FD;ECrEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB24FD;AqBz4FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB24FP;AqBz4FC;;;EAGE,wBAAA;ErB24FH;AqBt4FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBk5FT;AoBx2FD;ECrCI,gBAAA;EACA,2BAAA;ErBg5FH;AoBn2FD;EACE,gBAAA;EACA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","sourcesContent":[null,"/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n * {\n text-shadow: none !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links for images, or javascript/internal links\n a[href^=\"javascript:\"]:after,\n a[href^=\"#\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .table {\n td,\n th {\n background-color: #fff !important;\n }\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n width: 100% \\9; // Force IE10 and below to size SVG images correctly\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\n// Undo browser default styling\ncite {\n font-style: normal;\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n content: \"\";\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n > td,\n > th {\n background-color: @table-bg-accent;\n }\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n > td,\n > th {\n background-color: @table-bg-hover;\n }\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n overflow-x: auto;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n -webkit-overflow-scrolling: touch;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: not-allowed;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n line-height: @input-height-base;\n // IE8+ misaligns the text within date inputs, so we reset\n line-height: @line-height-base ~\"\\0\";\n\n &.input-sm {\n line-height: @input-height-small;\n }\n &.input-lg {\n line-height: @input-height-large;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n min-height: @line-height-computed; // clear the floating input if there is no label text\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because

    `.
    +@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
    +@font-family-base:        @font-family-sans-serif;
    +
    +@font-size-base:          14px;
    +@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
    +@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
    +
    +@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
    +@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
    +@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
    +@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
    +@font-size-h5:            @font-size-base;
    +@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
    +
    +//** Unit-less `line-height` for use in components like buttons.
    +@line-height-base:        1.428571429; // 20/14
    +//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
    +@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
    +
    +//** By default, this inherits from the ``.
    +@headings-font-family:    inherit;
    +@headings-font-weight:    500;
    +@headings-line-height:    1.1;
    +@headings-color:          inherit;
    +
    +
    +//== Iconography
    +//
    +//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
    +
    +//** Load fonts from this directory.
    +@icon-font-path:          "../fonts/";
    +//** File name for all font files.
    +@icon-font-name:          "glyphicons-halflings-regular";
    +//** Element ID within SVG icon file.
    +@icon-font-svg-id:        "glyphicons_halflingsregular";
    +
    +
    +//== Components
    +//
    +//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
    +
    +@padding-base-vertical:     6px;
    +@padding-base-horizontal:   12px;
    +
    +@padding-large-vertical:    10px;
    +@padding-large-horizontal:  16px;
    +
    +@padding-small-vertical:    5px;
    +@padding-small-horizontal:  10px;
    +
    +@padding-xs-vertical:       1px;
    +@padding-xs-horizontal:     5px;
    +
    +@line-height-large:         1.33;
    +@line-height-small:         1.5;
    +
    +@border-radius-base:        4px;
    +@border-radius-large:       6px;
    +@border-radius-small:       3px;
    +
    +//** Global color for active items (e.g., navs or dropdowns).
    +@component-active-color:    #fff;
    +//** Global background color for active items (e.g., navs or dropdowns).
    +@component-active-bg:       @brand-primary;
    +
    +//** Width of the `border` for generating carets that indicator dropdowns.
    +@caret-width-base:          4px;
    +//** Carets increase slightly in size for larger components.
    +@caret-width-large:         5px;
    +
    +
    +//== Tables
    +//
    +//## Customizes the `.table` component with basic values, each used across all table variations.
    +
    +//** Padding for ``s and ``s.
    +@table-cell-padding:            8px;
    +//** Padding for cells in `.table-condensed`.
    +@table-condensed-cell-padding:  5px;
    +
    +//** Default background color used for all tables.
    +@table-bg:                      transparent;
    +//** Background color used for `.table-striped`.
    +@table-bg-accent:               #f9f9f9;
    +//** Background color used for `.table-hover`.
    +@table-bg-hover:                #f5f5f5;
    +@table-bg-active:               @table-bg-hover;
    +
    +//** Border color for table and cell borders.
    +@table-border-color:            #ddd;
    +
    +
    +//== Buttons
    +//
    +//## For each of Bootstrap's buttons, define text, background and border color.
    +
    +@btn-font-weight:                normal;
    +
    +@btn-default-color:              #333;
    +@btn-default-bg:                 #fff;
    +@btn-default-border:             #ccc;
    +
    +@btn-primary-color:              #fff;
    +@btn-primary-bg:                 @brand-primary;
    +@btn-primary-border:             darken(@btn-primary-bg, 5%);
    +
    +@btn-success-color:              #fff;
    +@btn-success-bg:                 @brand-success;
    +@btn-success-border:             darken(@btn-success-bg, 5%);
    +
    +@btn-info-color:                 #fff;
    +@btn-info-bg:                    @brand-info;
    +@btn-info-border:                darken(@btn-info-bg, 5%);
    +
    +@btn-warning-color:              #fff;
    +@btn-warning-bg:                 @brand-warning;
    +@btn-warning-border:             darken(@btn-warning-bg, 5%);
    +
    +@btn-danger-color:               #fff;
    +@btn-danger-bg:                  @brand-danger;
    +@btn-danger-border:              darken(@btn-danger-bg, 5%);
    +
    +@btn-link-disabled-color:        @gray-light;
    +
    +
    +//== Forms
    +//
    +//##
    +
    +//** `` background color
    +@input-bg:                       #fff;
    +//** `` background color
    +@input-bg-disabled:              @gray-lighter;
    +
    +//** Text color for ``s
    +@input-color:                    @gray;
    +//** `` border color
    +@input-border:                   #ccc;
    +//** `` border radius
    +@input-border-radius:            @border-radius-base;
    +//** Border color for inputs on focus
    +@input-border-focus:             #66afe9;
    +
    +//** Placeholder text color
    +@input-color-placeholder:        @gray-light;
    +
    +//** Default `.form-control` height
    +@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
    +//** Large `.form-control` height
    +@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
    +//** Small `.form-control` height
    +@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
    +
    +@legend-color:                   @gray-dark;
    +@legend-border-color:            #e5e5e5;
    +
    +//** Background color for textual input addons
    +@input-group-addon-bg:           @gray-lighter;
    +//** Border color for textual input addons
    +@input-group-addon-border-color: @input-border;
    +
    +
    +//== Dropdowns
    +//
    +//## Dropdown menu container and contents.
    +
    +//** Background for the dropdown menu.
    +@dropdown-bg:                    #fff;
    +//** Dropdown menu `border-color`.
    +@dropdown-border:                rgba(0,0,0,.15);
    +//** Dropdown menu `border-color` **for IE8**.
    +@dropdown-fallback-border:       #ccc;
    +//** Divider color for between dropdown items.
    +@dropdown-divider-bg:            #e5e5e5;
    +
    +//** Dropdown link text color.
    +@dropdown-link-color:            @gray-dark;
    +//** Hover color for dropdown links.
    +@dropdown-link-hover-color:      darken(@gray-dark, 5%);
    +//** Hover background for dropdown links.
    +@dropdown-link-hover-bg:         #f5f5f5;
    +
    +//** Active dropdown menu item text color.
    +@dropdown-link-active-color:     @component-active-color;
    +//** Active dropdown menu item background color.
    +@dropdown-link-active-bg:        @component-active-bg;
    +
    +//** Disabled dropdown menu item background color.
    +@dropdown-link-disabled-color:   @gray-light;
    +
    +//** Text color for headers within dropdown menus.
    +@dropdown-header-color:          @gray-light;
    +
    +//** Deprecated `@dropdown-caret-color` as of v3.1.0
    +@dropdown-caret-color:           #000;
    +
    +
    +//-- Z-index master list
    +//
    +// Warning: Avoid customizing these values. They're used for a bird's eye view
    +// of components dependent on the z-axis and are designed to all work together.
    +//
    +// Note: These variables are not generated into the Customizer.
    +
    +@zindex-navbar:            1000;
    +@zindex-dropdown:          1000;
    +@zindex-popover:           1060;
    +@zindex-tooltip:           1070;
    +@zindex-navbar-fixed:      1030;
    +@zindex-modal-background:  1040;
    +@zindex-modal:             1050;
    +
    +
    +//== Media queries breakpoints
    +//
    +//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
    +
    +// Extra small screen / phone
    +//** Deprecated `@screen-xs` as of v3.0.1
    +@screen-xs:                  480px;
    +//** Deprecated `@screen-xs-min` as of v3.2.0
    +@screen-xs-min:              @screen-xs;
    +//** Deprecated `@screen-phone` as of v3.0.1
    +@screen-phone:               @screen-xs-min;
    +
    +// Small screen / tablet
    +//** Deprecated `@screen-sm` as of v3.0.1
    +@screen-sm:                  768px;
    +@screen-sm-min:              @screen-sm;
    +//** Deprecated `@screen-tablet` as of v3.0.1
    +@screen-tablet:              @screen-sm-min;
    +
    +// Medium screen / desktop
    +//** Deprecated `@screen-md` as of v3.0.1
    +@screen-md:                  992px;
    +@screen-md-min:              @screen-md;
    +//** Deprecated `@screen-desktop` as of v3.0.1
    +@screen-desktop:             @screen-md-min;
    +
    +// Large screen / wide desktop
    +//** Deprecated `@screen-lg` as of v3.0.1
    +@screen-lg:                  1200px;
    +@screen-lg-min:              @screen-lg;
    +//** Deprecated `@screen-lg-desktop` as of v3.0.1
    +@screen-lg-desktop:          @screen-lg-min;
    +
    +// So media queries don't overlap when required, provide a maximum
    +@screen-xs-max:              (@screen-sm-min - 1);
    +@screen-sm-max:              (@screen-md-min - 1);
    +@screen-md-max:              (@screen-lg-min - 1);
    +
    +
    +//== Grid system
    +//
    +//## Define your custom responsive grid.
    +
    +//** Number of columns in the grid.
    +@grid-columns:              12;
    +//** Padding between columns. Gets divided in half for the left and right.
    +@grid-gutter-width:         30px;
    +// Navbar collapse
    +//** Point at which the navbar becomes uncollapsed.
    +@grid-float-breakpoint:     @screen-sm-min;
    +//** Point at which the navbar begins collapsing.
    +@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
    +
    +
    +//== Container sizes
    +//
    +//## Define the maximum width of `.container` for different screen sizes.
    +
    +// Small screen / tablet
    +@container-tablet:             ((720px + @grid-gutter-width));
    +//** For `@screen-sm-min` and up.
    +@container-sm:                 @container-tablet;
    +
    +// Medium screen / desktop
    +@container-desktop:            ((940px + @grid-gutter-width));
    +//** For `@screen-md-min` and up.
    +@container-md:                 @container-desktop;
    +
    +// Large screen / wide desktop
    +@container-large-desktop:      ((1140px + @grid-gutter-width));
    +//** For `@screen-lg-min` and up.
    +@container-lg:                 @container-large-desktop;
    +
    +
    +//== Navbar
    +//
    +//##
    +
    +// Basics of a navbar
    +@navbar-height:                    50px;
    +@navbar-margin-bottom:             @line-height-computed;
    +@navbar-border-radius:             @border-radius-base;
    +@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
    +@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
    +@navbar-collapse-max-height:       340px;
    +
    +@navbar-default-color:             #777;
    +@navbar-default-bg:                #f8f8f8;
    +@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
    +
    +// Navbar links
    +@navbar-default-link-color:                #777;
    +@navbar-default-link-hover-color:          #333;
    +@navbar-default-link-hover-bg:             transparent;
    +@navbar-default-link-active-color:         #555;
    +@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
    +@navbar-default-link-disabled-color:       #ccc;
    +@navbar-default-link-disabled-bg:          transparent;
    +
    +// Navbar brand label
    +@navbar-default-brand-color:               @navbar-default-link-color;
    +@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
    +@navbar-default-brand-hover-bg:            transparent;
    +
    +// Navbar toggle
    +@navbar-default-toggle-hover-bg:           #ddd;
    +@navbar-default-toggle-icon-bar-bg:        #888;
    +@navbar-default-toggle-border-color:       #ddd;
    +
    +
    +// Inverted navbar
    +// Reset inverted navbar basics
    +@navbar-inverse-color:                      @gray-light;
    +@navbar-inverse-bg:                         #222;
    +@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
    +
    +// Inverted navbar links
    +@navbar-inverse-link-color:                 @gray-light;
    +@navbar-inverse-link-hover-color:           #fff;
    +@navbar-inverse-link-hover-bg:              transparent;
    +@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
    +@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
    +@navbar-inverse-link-disabled-color:        #444;
    +@navbar-inverse-link-disabled-bg:           transparent;
    +
    +// Inverted navbar brand label
    +@navbar-inverse-brand-color:                @navbar-inverse-link-color;
    +@navbar-inverse-brand-hover-color:          #fff;
    +@navbar-inverse-brand-hover-bg:             transparent;
    +
    +// Inverted navbar toggle
    +@navbar-inverse-toggle-hover-bg:            #333;
    +@navbar-inverse-toggle-icon-bar-bg:         #fff;
    +@navbar-inverse-toggle-border-color:        #333;
    +
    +
    +//== Navs
    +//
    +//##
    +
    +//=== Shared nav styles
    +@nav-link-padding:                          10px 15px;
    +@nav-link-hover-bg:                         @gray-lighter;
    +
    +@nav-disabled-link-color:                   @gray-light;
    +@nav-disabled-link-hover-color:             @gray-light;
    +
    +@nav-open-link-hover-color:                 #fff;
    +
    +//== Tabs
    +@nav-tabs-border-color:                     #ddd;
    +
    +@nav-tabs-link-hover-border-color:          @gray-lighter;
    +
    +@nav-tabs-active-link-hover-bg:             @body-bg;
    +@nav-tabs-active-link-hover-color:          @gray;
    +@nav-tabs-active-link-hover-border-color:   #ddd;
    +
    +@nav-tabs-justified-link-border-color:            #ddd;
    +@nav-tabs-justified-active-link-border-color:     @body-bg;
    +
    +//== Pills
    +@nav-pills-border-radius:                   @border-radius-base;
    +@nav-pills-active-link-hover-bg:            @component-active-bg;
    +@nav-pills-active-link-hover-color:         @component-active-color;
    +
    +
    +//== Pagination
    +//
    +//##
    +
    +@pagination-color:                     @link-color;
    +@pagination-bg:                        #fff;
    +@pagination-border:                    #ddd;
    +
    +@pagination-hover-color:               @link-hover-color;
    +@pagination-hover-bg:                  @gray-lighter;
    +@pagination-hover-border:              #ddd;
    +
    +@pagination-active-color:              #fff;
    +@pagination-active-bg:                 @brand-primary;
    +@pagination-active-border:             @brand-primary;
    +
    +@pagination-disabled-color:            @gray-light;
    +@pagination-disabled-bg:               #fff;
    +@pagination-disabled-border:           #ddd;
    +
    +
    +//== Pager
    +//
    +//##
    +
    +@pager-bg:                             @pagination-bg;
    +@pager-border:                         @pagination-border;
    +@pager-border-radius:                  15px;
    +
    +@pager-hover-bg:                       @pagination-hover-bg;
    +
    +@pager-active-bg:                      @pagination-active-bg;
    +@pager-active-color:                   @pagination-active-color;
    +
    +@pager-disabled-color:                 @pagination-disabled-color;
    +
    +
    +//== Jumbotron
    +//
    +//##
    +
    +@jumbotron-padding:              30px;
    +@jumbotron-color:                inherit;
    +@jumbotron-bg:                   @gray-lighter;
    +@jumbotron-heading-color:        inherit;
    +@jumbotron-font-size:            ceil((@font-size-base * 1.5));
    +
    +
    +//== Form states and alerts
    +//
    +//## Define colors for form feedback states and, by default, alerts.
    +
    +@state-success-text:             #3c763d;
    +@state-success-bg:               #dff0d8;
    +@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
    +
    +@state-info-text:                #31708f;
    +@state-info-bg:                  #d9edf7;
    +@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
    +
    +@state-warning-text:             #8a6d3b;
    +@state-warning-bg:               #fcf8e3;
    +@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
    +
    +@state-danger-text:              #a94442;
    +@state-danger-bg:                #f2dede;
    +@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
    +
    +
    +//== Tooltips
    +//
    +//##
    +
    +//** Tooltip max width
    +@tooltip-max-width:           200px;
    +//** Tooltip text color
    +@tooltip-color:               #fff;
    +//** Tooltip background color
    +@tooltip-bg:                  #000;
    +@tooltip-opacity:             .9;
    +
    +//** Tooltip arrow width
    +@tooltip-arrow-width:         5px;
    +//** Tooltip arrow color
    +@tooltip-arrow-color:         @tooltip-bg;
    +
    +
    +//== Popovers
    +//
    +//##
    +
    +//** Popover body background color
    +@popover-bg:                          #fff;
    +//** Popover maximum width
    +@popover-max-width:                   276px;
    +//** Popover border color
    +@popover-border-color:                rgba(0,0,0,.2);
    +//** Popover fallback border color
    +@popover-fallback-border-color:       #ccc;
    +
    +//** Popover title background color
    +@popover-title-bg:                    darken(@popover-bg, 3%);
    +
    +//** Popover arrow width
    +@popover-arrow-width:                 10px;
    +//** Popover arrow color
    +@popover-arrow-color:                 #fff;
    +
    +//** Popover outer arrow width
    +@popover-arrow-outer-width:           (@popover-arrow-width + 1);
    +//** Popover outer arrow color
    +@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
    +//** Popover outer arrow fallback color
    +@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
    +
    +
    +//== Labels
    +//
    +//##
    +
    +//** Default label background color
    +@label-default-bg:            @gray-light;
    +//** Primary label background color
    +@label-primary-bg:            @brand-primary;
    +//** Success label background color
    +@label-success-bg:            @brand-success;
    +//** Info label background color
    +@label-info-bg:               @brand-info;
    +//** Warning label background color
    +@label-warning-bg:            @brand-warning;
    +//** Danger label background color
    +@label-danger-bg:             @brand-danger;
    +
    +//** Default label text color
    +@label-color:                 #fff;
    +//** Default text color of a linked label
    +@label-link-hover-color:      #fff;
    +
    +
    +//== Modals
    +//
    +//##
    +
    +//** Padding applied to the modal body
    +@modal-inner-padding:         15px;
    +
    +//** Padding applied to the modal title
    +@modal-title-padding:         15px;
    +//** Modal title line-height
    +@modal-title-line-height:     @line-height-base;
    +
    +//** Background color of modal content area
    +@modal-content-bg:                             #fff;
    +//** Modal content border color
    +@modal-content-border-color:                   rgba(0,0,0,.2);
    +//** Modal content border color **for IE8**
    +@modal-content-fallback-border-color:          #999;
    +
    +//** Modal backdrop background color
    +@modal-backdrop-bg:           #000;
    +//** Modal backdrop opacity
    +@modal-backdrop-opacity:      .5;
    +//** Modal header border color
    +@modal-header-border-color:   #e5e5e5;
    +//** Modal footer border color
    +@modal-footer-border-color:   @modal-header-border-color;
    +
    +@modal-lg:                    900px;
    +@modal-md:                    600px;
    +@modal-sm:                    300px;
    +
    +
    +//== Alerts
    +//
    +//## Define alert colors, border radius, and padding.
    +
    +@alert-padding:               15px;
    +@alert-border-radius:         @border-radius-base;
    +@alert-link-font-weight:      bold;
    +
    +@alert-success-bg:            @state-success-bg;
    +@alert-success-text:          @state-success-text;
    +@alert-success-border:        @state-success-border;
    +
    +@alert-info-bg:               @state-info-bg;
    +@alert-info-text:             @state-info-text;
    +@alert-info-border:           @state-info-border;
    +
    +@alert-warning-bg:            @state-warning-bg;
    +@alert-warning-text:          @state-warning-text;
    +@alert-warning-border:        @state-warning-border;
    +
    +@alert-danger-bg:             @state-danger-bg;
    +@alert-danger-text:           @state-danger-text;
    +@alert-danger-border:         @state-danger-border;
    +
    +
    +//== Progress bars
    +//
    +//##
    +
    +//** Background color of the whole progress component
    +@progress-bg:                 #f5f5f5;
    +//** Progress bar text color
    +@progress-bar-color:          #fff;
    +
    +//** Default progress bar color
    +@progress-bar-bg:             @brand-primary;
    +//** Success progress bar color
    +@progress-bar-success-bg:     @brand-success;
    +//** Warning progress bar color
    +@progress-bar-warning-bg:     @brand-warning;
    +//** Danger progress bar color
    +@progress-bar-danger-bg:      @brand-danger;
    +//** Info progress bar color
    +@progress-bar-info-bg:        @brand-info;
    +
    +
    +//== List group
    +//
    +//##
    +
    +//** Background color on `.list-group-item`
    +@list-group-bg:                 #fff;
    +//** `.list-group-item` border color
    +@list-group-border:             #ddd;
    +//** List group border radius
    +@list-group-border-radius:      @border-radius-base;
    +
    +//** Background color of single list items on hover
    +@list-group-hover-bg:           #f5f5f5;
    +//** Text color of active list items
    +@list-group-active-color:       @component-active-color;
    +//** Background color of active list items
    +@list-group-active-bg:          @component-active-bg;
    +//** Border color of active list elements
    +@list-group-active-border:      @list-group-active-bg;
    +//** Text color for content within active list items
    +@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
    +
    +//** Text color of disabled list items
    +@list-group-disabled-color:      @gray-light;
    +//** Background color of disabled list items
    +@list-group-disabled-bg:         @gray-lighter;
    +//** Text color for content within disabled list items
    +@list-group-disabled-text-color: @list-group-disabled-color;
    +
    +@list-group-link-color:         #555;
    +@list-group-link-hover-color:   @list-group-link-color;
    +@list-group-link-heading-color: #333;
    +
    +
    +//== Panels
    +//
    +//##
    +
    +@panel-bg:                    #fff;
    +@panel-body-padding:          15px;
    +@panel-heading-padding:       10px 15px;
    +@panel-footer-padding:        @panel-heading-padding;
    +@panel-border-radius:         @border-radius-base;
    +
    +//** Border color for elements within panels
    +@panel-inner-border:          #ddd;
    +@panel-footer-bg:             #f5f5f5;
    +
    +@panel-default-text:          @gray-dark;
    +@panel-default-border:        #ddd;
    +@panel-default-heading-bg:    #f5f5f5;
    +
    +@panel-primary-text:          #fff;
    +@panel-primary-border:        @brand-primary;
    +@panel-primary-heading-bg:    @brand-primary;
    +
    +@panel-success-text:          @state-success-text;
    +@panel-success-border:        @state-success-border;
    +@panel-success-heading-bg:    @state-success-bg;
    +
    +@panel-info-text:             @state-info-text;
    +@panel-info-border:           @state-info-border;
    +@panel-info-heading-bg:       @state-info-bg;
    +
    +@panel-warning-text:          @state-warning-text;
    +@panel-warning-border:        @state-warning-border;
    +@panel-warning-heading-bg:    @state-warning-bg;
    +
    +@panel-danger-text:           @state-danger-text;
    +@panel-danger-border:         @state-danger-border;
    +@panel-danger-heading-bg:     @state-danger-bg;
    +
    +
    +//== Thumbnails
    +//
    +//##
    +
    +//** Padding around the thumbnail image
    +@thumbnail-padding:           4px;
    +//** Thumbnail background color
    +@thumbnail-bg:                @body-bg;
    +//** Thumbnail border color
    +@thumbnail-border:            #ddd;
    +//** Thumbnail border radius
    +@thumbnail-border-radius:     @border-radius-base;
    +
    +//** Custom text color for thumbnail captions
    +@thumbnail-caption-color:     @text-color;
    +//** Padding around the thumbnail caption
    +@thumbnail-caption-padding:   9px;
    +
    +
    +//== Wells
    +//
    +//##
    +
    +@well-bg:                     #f5f5f5;
    +@well-border:                 darken(@well-bg, 7%);
    +
    +
    +//== Badges
    +//
    +//##
    +
    +@badge-color:                 #fff;
    +//** Linked badge text color on hover
    +@badge-link-hover-color:      #fff;
    +@badge-bg:                    @gray-light;
    +
    +//** Badge text color in active nav link
    +@badge-active-color:          @link-color;
    +//** Badge background color in active nav link
    +@badge-active-bg:             #fff;
    +
    +@badge-font-weight:           bold;
    +@badge-line-height:           1;
    +@badge-border-radius:         10px;
    +
    +
    +//== Breadcrumbs
    +//
    +//##
    +
    +@breadcrumb-padding-vertical:   8px;
    +@breadcrumb-padding-horizontal: 15px;
    +//** Breadcrumb background color
    +@breadcrumb-bg:                 #f5f5f5;
    +//** Breadcrumb text color
    +@breadcrumb-color:              #ccc;
    +//** Text color of current page in the breadcrumb
    +@breadcrumb-active-color:       @gray-light;
    +//** Textual separator for between breadcrumb elements
    +@breadcrumb-separator:          "/";
    +
    +
    +//== Carousel
    +//
    +//##
    +
    +@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
    +
    +@carousel-control-color:                      #fff;
    +@carousel-control-width:                      15%;
    +@carousel-control-opacity:                    .5;
    +@carousel-control-font-size:                  20px;
    +
    +@carousel-indicator-active-bg:                #fff;
    +@carousel-indicator-border-color:             #fff;
    +
    +@carousel-caption-color:                      #fff;
    +
    +
    +//== Close
    +//
    +//##
    +
    +@close-font-weight:           bold;
    +@close-color:                 #000;
    +@close-text-shadow:           0 1px 0 #fff;
    +
    +
    +//== Code
    +//
    +//##
    +
    +@code-color:                  #c7254e;
    +@code-bg:                     #f9f2f4;
    +
    +@kbd-color:                   #fff;
    +@kbd-bg:                      #333;
    +
    +@pre-bg:                      #f5f5f5;
    +@pre-color:                   @gray-dark;
    +@pre-border-color:            #ccc;
    +@pre-scrollable-max-height:   340px;
    +
    +
    +//== Type
    +//
    +//##
    +
    +//** Horizontal offset for forms and lists.
    +@component-offset-horizontal: 180px;
    +//** Text muted color
    +@text-muted:                  @gray-light;
    +//** Abbreviations and acronyms border color
    +@abbr-border-color:           @gray-light;
    +//** Headings small color
    +@headings-small-color:        @gray-light;
    +//** Blockquote small color
    +@blockquote-small-color:      @gray-light;
    +//** Blockquote font size
    +@blockquote-font-size:        (@font-size-base * 1.25);
    +//** Blockquote border color
    +@blockquote-border-color:     @gray-lighter;
    +//** Page header border color
    +@page-header-border-color:    @gray-lighter;
    +//** Width of horizontal description list titles
    +@dl-horizontal-offset:        @component-offset-horizontal;
    +//** Horizontal line color.
    +@hr-border:                   @gray-lighter;
    +
    +
    diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/wells.less b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/wells.less
    new file mode 100644
    index 0000000000..15d072b0cd
    --- /dev/null
    +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/less/wells.less
    @@ -0,0 +1,29 @@
    +//
    +// Wells
    +// --------------------------------------------------
    +
    +
    +// Base class
    +.well {
    +  min-height: 20px;
    +  padding: 19px;
    +  margin-bottom: 20px;
    +  background-color: @well-bg;
    +  border: 1px solid @well-border;
    +  border-radius: @border-radius-base;
    +  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
    +  blockquote {
    +    border-color: #ddd;
    +    border-color: rgba(0,0,0,.15);
    +  }
    +}
    +
    +// Sizes
    +.well-lg {
    +  padding: 24px;
    +  border-radius: @border-radius-large;
    +}
    +.well-sm {
    +  padding: 9px;
    +  border-radius: @border-radius-small;
    +}
    diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/package.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/package.json
    new file mode 100644
    index 0000000000..3243fa8ba5
    --- /dev/null
    +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/bootstrap/package.json
    @@ -0,0 +1,81 @@
    +{
    +  "name": "bootstrap",
    +  "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
    +  "version": "3.2.0",
    +  "keywords": [
    +    "css",
    +    "less",
    +    "mobile-first",
    +    "responsive",
    +    "front-end",
    +    "framework",
    +    "web"
    +  ],
    +  "homepage": "http://getbootstrap.com",
    +  "author": "Twitter, Inc.",
    +  "scripts": {
    +    "test": "grunt test"
    +  },
    +  "style": "dist/css/bootstrap.css",
    +  "less": "less/bootstrap.less",
    +  "repository": {
    +    "type": "git",
    +    "url": "https://github.com/twbs/bootstrap.git"
    +  },
    +  "bugs": {
    +    "url": "https://github.com/twbs/bootstrap/issues"
    +  },
    +  "license": {
    +    "type": "MIT",
    +    "url": "https://github.com/twbs/bootstrap/blob/master/LICENSE"
    +  },
    +  "devDependencies": {
    +    "btoa": "~1.1.2",
    +    "glob": "~4.0.2",
    +    "grunt": "~0.4.5",
    +    "grunt-autoprefixer": "~0.7.6",
    +    "grunt-banner": "~0.2.3",
    +    "grunt-contrib-clean": "~0.5.0",
    +    "grunt-contrib-concat": "~0.4.0",
    +    "grunt-contrib-connect": "~0.8.0",
    +    "grunt-contrib-copy": "~0.5.0",
    +    "grunt-contrib-csslint": "~0.2.0",
    +    "grunt-contrib-cssmin": "~0.10.0",
    +    "grunt-contrib-jade": "~0.12.0",
    +    "grunt-contrib-jshint": "~0.10.0",
    +    "grunt-contrib-less": "~0.11.3",
    +    "grunt-contrib-qunit": "~0.5.1",
    +    "grunt-contrib-uglify": "~0.5.0",
    +    "grunt-contrib-watch": "~0.6.1",
    +    "grunt-csscomb": "~2.0.1",
    +    "grunt-exec": "~0.4.5",
    +    "grunt-html-validation": "~0.1.18",
    +    "grunt-jekyll": "~0.4.2",
    +    "grunt-jscs-checker": "~0.6.0",
    +    "grunt-saucelabs": "~8.1.0",
    +    "grunt-sed": "~0.1.1",
    +    "load-grunt-tasks": "~0.6.0",
    +    "markdown": "~0.5.0",
    +    "npm-shrinkwrap": "~3.1.6",
    +    "time-grunt": "~0.3.2"
    +  },
    +  "engines": {
    +    "node": "~0.10.1"
    +  },
    +  "jspm": {
    +    "main": "js/bootstrap",
    +    "directories": {
    +      "example": "examples",
    +      "lib": "dist"
    +    },
    +    "shim": {
    +      "js/bootstrap": {
    +        "imports": "jquery",
    +        "exports": "$"
    +      }
    +    },
    +    "buildConfig": {
    +      "uglify": true
    +    }
    +  }
    +}
    diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/.bower.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/.bower.json
    new file mode 100644
    index 0000000000..5789d84119
    --- /dev/null
    +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/.bower.json
    @@ -0,0 +1,22 @@
    +{
    +  "name": "jquery",
    +  "version": "2.0.3",
    +  "description": "jQuery component",
    +  "keywords": [
    +    "jquery",
    +    "component"
    +  ],
    +  "main": "jquery.js",
    +  "license": "MIT",
    +  "homepage": "https://github.com/components/jquery",
    +  "_release": "2.0.3",
    +  "_resolution": {
    +    "type": "version",
    +    "tag": "2.0.3",
    +    "commit": "452a56b52b8f4a032256cdb8b6838f25f0bdb3d2"
    +  },
    +  "_source": "git://github.com/components/jquery.git",
    +  "_target": "2.0.3",
    +  "_originalSource": "jquery",
    +  "_direct": true
    +}
    \ No newline at end of file
    diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/README.md b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/README.md
    new file mode 100644
    index 0000000000..328064b7b6
    --- /dev/null
    +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/README.md
    @@ -0,0 +1,11 @@
    +jQuery Component
    +================
    +
    +Shim repository for the [jQuery](http://jquery.com).
    +
    +Package Managers
    +----------------
    +
    +* [Bower](http://bower.io/): `jquery`
    +* [Component](https://github.com/component/component): `components/jquery`
    +* [Composer](http://packagist.org/packages/components/jquery): `components/jquery`
    diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/bower.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/bower.json
    new file mode 100644
    index 0000000000..2fa650fc55
    --- /dev/null
    +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/bower.json
    @@ -0,0 +1,11 @@
    +{
    +  "name": "jquery",
    +  "version": "2.0.3",
    +  "description": "jQuery component",
    +  "keywords": [
    +    "jquery",
    +    "component"
    +  ],
    +  "main": "jquery.js",
    +  "license": "MIT"
    +}
    diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/component.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/component.json
    new file mode 100644
    index 0000000000..cf834a301a
    --- /dev/null
    +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/component.json
    @@ -0,0 +1,15 @@
    +{
    +  "name": "jquery",
    +  "repo": "components/jquery",
    +  "version": "2.0.3",
    +  "description": "jQuery component",
    +  "keywords": [
    +    "jquery",
    +    "component"
    +  ],
    +  "main": "jquery.js",
    +  "scripts": [
    +    "jquery.js"
    +  ],
    +  "license": "MIT"
    +}
    diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/composer.json b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/composer.json
    new file mode 100644
    index 0000000000..c617840623
    --- /dev/null
    +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/composer.json
    @@ -0,0 +1,35 @@
    +{
    +    "name": "components/jquery",
    +    "description": "jQuery JavaScript Library",
    +    "type": "component",
    +    "homepage": "http://jquery.com",
    +    "license": "MIT",
    +    "support": {
    +        "irc": "irc://irc.freenode.org/jquery",
    +        "issues": "http://bugs.jquery.com",
    +        "forum": "http://forum.jquery.com",
    +        "wiki": "http://docs.jquery.com/",
    +        "source": "https://github.com/jquery/jquery"
    +    },
    +    "authors": [
    +        {
    +            "name": "John Resig",
    +            "email": "jeresig@gmail.com"
    +        }
    +    ],
    +    "require": {
    +        "robloach/component-installer": "*"
    +    },
    +    "extra": {
    +        "component": {
    +            "scripts": [
    +                "jquery.js"
    +            ],
    +            "files": [
    +                "jquery.min.js",
    +                "jquery-migrate.js",
    +                "jquery-migrate.min.js"
    +            ]
    +        }
    +    }
    +}
    diff --git a/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/jquery-migrate.js b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/jquery-migrate.js
    new file mode 100644
    index 0000000000..942cb8b4d8
    --- /dev/null
    +++ b/features/device-mgt-iot-droneanalyzer-feature/org.wso2.carbon.device.mgt.iot.droneanalyzer.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.drone_analyzer.type-view/public/js/bower_components/jquery/jquery-migrate.js
    @@ -0,0 +1,511 @@
    +/*!
    + * jQuery Migrate - v1.1.1 - 2013-02-16
    + * https://github.com/jquery/jquery-migrate
    + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT
    + */
    +(function( jQuery, window, undefined ) {
    +// See http://bugs.jquery.com/ticket/13335
    +// "use strict";
    +
    +
    +var warnedAbout = {};
    +
    +// List of warnings already given; public read only
    +jQuery.migrateWarnings = [];
    +
    +// Set to true to prevent console output; migrateWarnings still maintained
    +// jQuery.migrateMute = false;
    +
    +// Show a message on the console so devs know we're active
    +if ( !jQuery.migrateMute && window.console && console.log ) {
    +	console.log("JQMIGRATE: Logging is active");
    +}
    +
    +// Set to false to disable traces that appear with warnings
    +if ( jQuery.migrateTrace === undefined ) {
    +	jQuery.migrateTrace = true;
    +}
    +
    +// Forget any warnings we've already given; public
    +jQuery.migrateReset = function() {
    +	warnedAbout = {};
    +	jQuery.migrateWarnings.length = 0;
    +};
    +
    +function migrateWarn( msg) {
    +	if ( !warnedAbout[ msg ] ) {
    +		warnedAbout[ msg ] = true;
    +		jQuery.migrateWarnings.push( msg );
    +		if ( window.console && console.warn && !jQuery.migrateMute ) {
    +			console.warn( "JQMIGRATE: " + msg );
    +			if ( jQuery.migrateTrace && console.trace ) {
    +				console.trace();
    +			}
    +		}
    +	}
    +}
    +
    +function migrateWarnProp( obj, prop, value, msg ) {
    +	if ( Object.defineProperty ) {
    +		// On ES5 browsers (non-oldIE), warn if the code tries to get prop;
    +		// allow property to be overwritten in case some other plugin wants it
    +		try {
    +			Object.defineProperty( obj, prop, {
    +				configurable: true,
    +				enumerable: true,
    +				get: function() {
    +					migrateWarn( msg );
    +					return value;
    +				},
    +				set: function( newValue ) {
    +					migrateWarn( msg );
    +					value = newValue;
    +				}
    +			});
    +			return;
    +		} catch( err ) {
    +			// IE8 is a dope about Object.defineProperty, can't warn there
    +		}
    +	}
    +
    +	// Non-ES5 (or broken) browser; just set the property
    +	jQuery._definePropertyBroken = true;
    +	obj[ prop ] = value;
    +}
    +
    +if ( document.compatMode === "BackCompat" ) {
    +	// jQuery has never supported or tested Quirks Mode
    +	migrateWarn( "jQuery is not compatible with Quirks Mode" );
    +}
    +
    +
    +var attrFn = jQuery( "", { size: 1 } ).attr("size") && jQuery.attrFn,
    +	oldAttr = jQuery.attr,
    +	valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
    +		function() { return null; },
    +	valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
    +		function() { return undefined; },
    +	rnoType = /^(?:input|button)$/i,
    +	rnoAttrNodeType = /^[238]$/,
    +	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
    +	ruseDefault = /^(?:checked|selected)$/i;
    +
    +// jQuery.attrFn
    +migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
    +
    +jQuery.attr = function( elem, name, value, pass ) {
    +	var lowerName = name.toLowerCase(),
    +		nType = elem && elem.nodeType;
    +
    +	if ( pass ) {
    +		// Since pass is used internally, we only warn for new jQuery
    +		// versions where there isn't a pass arg in the formal params
    +		if ( oldAttr.length < 4 ) {
    +			migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
    +		}
    +		if ( elem && !rnoAttrNodeType.test( nType ) &&
    +			(attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
    +			return jQuery( elem )[ name ]( value );
    +		}
    +	}
    +
    +	// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
    +	// for disconnected elements we don't warn on $( "