From 2b4172591bcc2dd964f66e6e80086cb799549235 Mon Sep 17 00:00:00 2001 From: FoxUSA Date: Mon, 14 Apr 2014 10:50:25 -0700 Subject: [PATCH 01/64] Initial import --- .project | 11 + .travis.yml | 2 +- OpenNote.Test/.gitignore | 3 - OpenNote.Test/RunTests.cmd | 11 + OpenNote.Test/phpunit.phar | 113059 +++++++++++++++ OpenNote/.project | 23 + OpenNote/Config.js | 13 + OpenNote/Config.php | 122 +- OpenNote/{ajax.js.php => ajax.js} | 315 +- OpenNote/ajax.php | 77 - OpenNote/bower.json | 12 + .../angular-resource/.bower.json | 18 + .../angular-resource/README.md | 54 + .../angular-resource/angular-resource.js | 610 + .../angular-resource/angular-resource.min.js | 13 + .../angular-resource.min.js.map | 8 + .../angular-resource/bower.json | 8 + .../angular-route/.bower.json | 18 + .../bower_components/angular-route/README.md | 54 + .../angular-route/angular-route.js | 927 + .../angular-route/angular-route.min.js | 14 + .../angular-route/angular-route.min.js.map | 8 + .../bower_components/angular-route/bower.json | 8 + OpenNote/bower_components/angular/.bower.json | 16 + OpenNote/bower_components/angular/README.md | 48 + .../bower_components/angular/angular-csp.css | 18 + OpenNote/bower_components/angular/angular.js | 21464 +++ .../bower_components/angular/angular.min.js | 210 + .../angular/angular.min.js.gzip | Bin 0 -> 39258 bytes .../angular/angular.min.js.map | 8 + OpenNote/bower_components/angular/bower.json | 7 + .../bower_components/bootstrap/.bower.json | 34 + .../bower_components/bootstrap/Gruntfile.js | 421 + OpenNote/bower_components/bootstrap/LICENSE | 21 + OpenNote/bower_components/bootstrap/README.md | 173 + .../bower_components/bootstrap/bower.json | 24 + .../bootstrap/dist/css/bootstrap-theme.css | 347 + .../dist/css/bootstrap-theme.css.map | 1 + .../dist/css/bootstrap-theme.min.css | 7 + .../bootstrap/dist/css/bootstrap.css | 5785 + .../bootstrap/dist/css/bootstrap.css.map | 1 + .../bootstrap/dist/css/bootstrap.min.css | 7 + .../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 | 1951 + .../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 | 34 + .../bootstrap/grunt/bs-lessdoc-parser.js | 236 + .../bootstrap/grunt/bs-raw-files-generator.js | 31 + .../bootstrap/grunt/shrinkwrap.js | 28 + .../bower_components/bootstrap/js/affix.js | 137 + .../bower_components/bootstrap/js/alert.js | 88 + .../bower_components/bootstrap/js/button.js | 107 + .../bower_components/bootstrap/js/carousel.js | 205 + .../bower_components/bootstrap/js/collapse.js | 170 + .../bower_components/bootstrap/js/dropdown.js | 147 + .../bower_components/bootstrap/js/modal.js | 243 + .../bower_components/bootstrap/js/popover.js | 110 + .../bootstrap/js/scrollspy.js | 153 + OpenNote/bower_components/bootstrap/js/tab.js | 125 + .../bower_components/bootstrap/js/tooltip.js | 399 + .../bootstrap/js/transition.js | 48 + .../bootstrap/less/alerts.less | 67 + .../bootstrap/less/badges.less | 55 + .../bootstrap/less/bootstrap.less | 49 + .../bootstrap/less/breadcrumbs.less | 26 + .../bootstrap/less/button-groups.less | 226 + .../bootstrap/less/buttons.less | 159 + .../bootstrap/less/carousel.less | 232 + .../bootstrap/less/close.less | 33 + .../bower_components/bootstrap/less/code.less | 63 + .../bootstrap/less/component-animations.less | 29 + .../bootstrap/less/dropdowns.less | 213 + .../bootstrap/less/forms.less | 438 + .../bootstrap/less/glyphicons.less | 233 + .../bower_components/bootstrap/less/grid.less | 84 + .../bootstrap/less/input-groups.less | 162 + .../bootstrap/less/jumbotron.less | 44 + .../bootstrap/less/labels.less | 64 + .../bootstrap/less/list-group.less | 110 + .../bootstrap/less/media.less | 56 + .../bootstrap/less/mixins.less | 929 + .../bootstrap/less/modals.less | 139 + .../bootstrap/less/navbar.less | 616 + .../bower_components/bootstrap/less/navs.less | 242 + .../bootstrap/less/normalize.less | 423 + .../bootstrap/less/pager.less | 55 + .../bootstrap/less/pagination.less | 88 + .../bootstrap/less/panels.less | 241 + .../bootstrap/less/popovers.less | 133 + .../bootstrap/less/print.less | 101 + .../bootstrap/less/progress-bars.less | 80 + .../bootstrap/less/responsive-utilities.less | 92 + .../bootstrap/less/scaffolding.less | 134 + .../bootstrap/less/tables.less | 233 + .../bootstrap/less/theme.less | 247 + .../bootstrap/less/thumbnails.less | 36 + .../bootstrap/less/tooltip.less | 95 + .../bower_components/bootstrap/less/type.less | 293 + .../bootstrap/less/utilities.less | 56 + .../bootstrap/less/variables.less | 829 + .../bootstrap/less/wells.less | 29 + .../bower_components/bootstrap/package.json | 70 + .../bootstrap/test-infra/README.md | 100 + .../test-infra/npm-shrinkwrap.canonical.json | 1 + .../bootstrap/test-infra/requirements.txt | 1 + .../bootstrap/test-infra/s3_cache.py | 107 + .../bootstrap/test-infra/sauce_browsers.yml | 83 + .../test-infra/uncached-npm-install.sh | 4 + OpenNote/bower_components/jquery/.bower.json | 21 + .../bower_components/jquery/.editorconfig | 43 + .../bower_components/jquery/.gitattributes | 2 + OpenNote/bower_components/jquery/.gitignore | 14 + OpenNote/bower_components/jquery/.gitmodules | 6 + OpenNote/bower_components/jquery/.jshintrc | 17 + OpenNote/bower_components/jquery/.mailmap | 94 + OpenNote/bower_components/jquery/AUTHORS.txt | 173 + .../bower_components/jquery/CONTRIBUTING.md | 218 + OpenNote/bower_components/jquery/Gruntfile.js | 599 + .../bower_components/jquery/MIT-LICENSE.txt | 21 + OpenNote/bower_components/jquery/README.md | 399 + OpenNote/bower_components/jquery/bower.json | 11 + .../jquery/build/release-notes.js | 59 + .../bower_components/jquery/build/release.js | 317 + .../bower_components/jquery/component.json | 15 + .../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 | 0 .../bower_components/jquery/jquery.min.js | 6 + .../bower_components/jquery/jquery.min.map | 1 + OpenNote/bower_components/jquery/package.json | 38 + .../jquery/speed/benchmark.js | 15 + .../jquery/speed/benchmarker.css | 65 + .../jquery/speed/benchmarker.js | 181 + .../jquery/speed/closest.html | 39 + .../bower_components/jquery/speed/css.html | 82 + .../bower_components/jquery/speed/event.html | 58 + .../bower_components/jquery/speed/filter.html | 183 + .../bower_components/jquery/speed/find.html | 179 + .../bower_components/jquery/speed/index.html | 72 + .../jquery/speed/jquery-basis.js | 6238 + .../jquery/speed/slice.vs.concat.html | 47 + .../bower_components/jquery/src/.jshintrc | 26 + OpenNote/bower_components/jquery/src/ajax.js | 855 + .../bower_components/jquery/src/ajax/jsonp.js | 80 + .../jquery/src/ajax/script.js | 57 + .../bower_components/jquery/src/ajax/xhr.js | 111 + .../bower_components/jquery/src/attributes.js | 502 + .../bower_components/jquery/src/callbacks.js | 197 + OpenNote/bower_components/jquery/src/core.js | 846 + OpenNote/bower_components/jquery/src/css.js | 563 + OpenNote/bower_components/jquery/src/data.js | 356 + .../bower_components/jquery/src/deferred.js | 141 + .../bower_components/jquery/src/deprecated.js | 11 + .../bower_components/jquery/src/dimensions.js | 41 + .../bower_components/jquery/src/effects.js | 730 + .../jquery/src/event-alias.js | 32 + OpenNote/bower_components/jquery/src/event.js | 829 + .../bower_components/jquery/src/exports.js | 24 + OpenNote/bower_components/jquery/src/intro.js | 20 + .../jquery/src/manipulation.js | 577 + .../bower_components/jquery/src/offset.js | 167 + OpenNote/bower_components/jquery/src/outro.js | 2 + OpenNote/bower_components/jquery/src/queue.js | 145 + .../jquery/src/selector-native.js | 164 + .../bower_components/jquery/src/serialize.js | 99 + .../jquery/src/sizzle-jquery.js | 7 + .../bower_components/jquery/src/support.js | 113 + .../bower_components/jquery/src/traversing.js | 283 + OpenNote/bower_components/jquery/src/wrap.js | 69 + .../jquery/test/.jshintignore | 3 + .../bower_components/jquery/test/.jshintrc | 60 + .../bower_components/jquery/test/data/1x1.jpg | Bin 0 -> 693 bytes .../jquery/test/data/ajax/unreleasedXHR.html | 25 + .../jquery/test/data/atom+xml.php | 4 + .../jquery/test/data/badcall.js | 1 + .../jquery/test/data/badjson.js | 1 + .../jquery/test/data/cleanScript.html | 10 + .../jquery/test/data/core/cc_on.html | 22 + .../jquery/test/data/core/dont_return.php | 3 + .../jquery/test/data/core/dynamic_ready.html | 35 + .../jquery/test/data/dashboard.xml | 11 + .../test/data/dimensions/documentLarge.html | 17 + .../test/data/dimensions/documentSmall.html | 21 + .../jquery/test/data/echoData.php | 1 + .../jquery/test/data/echoQuery.php | 1 + .../jquery/test/data/errorWithJSON.php | 6 + .../jquery/test/data/errorWithText.php | 5 + .../jquery/test/data/etag.php | 21 + .../jquery/test/data/evalScript.php | 1 + .../jquery/test/data/event/focusElem.html | 16 + .../jquery/test/data/event/longLoadScript.php | 4 + .../test/data/event/onbeforeunload.html | 20 + .../jquery/test/data/event/promiseReady.html | 17 + .../jquery/test/data/event/syncReady.html | 23 + .../jquery/test/data/headers.php | 18 + .../jquery/test/data/if_modified_since.php | 20 + .../jquery/test/data/iframe.html | 8 + .../test/data/jquery-1.9.1.ajax_xhr.min.js | 5 + .../jquery/test/data/json.php | 13 + .../jquery/test/data/json_obj.js | 1 + .../jquery/test/data/jsonp.php | 14 + .../test/data/manipulation/iframe-denied.html | 36 + .../jquery/test/data/name.html | 1 + .../jquery/test/data/name.php | 24 + .../jquery/test/data/nocontent.php | 5 + .../jquery/test/data/offset/absolute.html | 41 + .../jquery/test/data/offset/body.html | 26 + .../jquery/test/data/offset/fixed.html | 34 + .../jquery/test/data/offset/relative.html | 31 + .../jquery/test/data/offset/scroll.html | 39 + .../jquery/test/data/offset/static.html | 31 + .../jquery/test/data/offset/table.html | 43 + .../jquery/test/data/params_html.php | 12 + .../jquery/test/data/readywaitasset.js | 1 + .../jquery/test/data/readywaitloader.js | 25 + .../jquery/test/data/script.php | 11 + .../test/data/selector/html5_selector.html | 114 + .../test/data/selector/sizzle_cache.html | 21 + .../jquery/test/data/statusText.php | 5 + .../test/data/support/bodyBackground.html | 28 + .../jquery/test/data/support/boxSizing.html | 19 + .../jquery/test/data/support/csp.js | 3 + .../jquery/test/data/support/csp.php | 22 + .../test/data/support/shrinkWrapBlocks.html | 23 + .../test/data/support/testElementCrash.html | 17 + .../jquery/test/data/test.html | 7 + .../bower_components/jquery/test/data/test.js | 3 + .../jquery/test/data/test.php | 7 + .../jquery/test/data/test2.html | 5 + .../jquery/test/data/test3.html | 3 + .../jquery/test/data/testinit.js | 264 + .../jquery/test/data/testrunner.js | 377 + .../jquery/test/data/testsuite.css | 155 + .../jquery/test/data/text.php | 12 + .../bower_components/jquery/test/data/ua.txt | 272 + .../jquery/test/data/with_fries.xml | 25 + .../test/data/with_fries_over_jsonp.php | 7 + .../jquery/test/delegatetest.html | 228 + .../jquery/test/hovertest.html | 158 + .../bower_components/jquery/test/index.html | 337 + .../bower_components/jquery/test/jquery.js | 5 + .../jquery/test/localfile.html | 75 + .../jquery/test/networkerror.html | 84 + .../jquery/test/readywait.html | 70 + .../bower_components/jquery/test/unit/ajax.js | 1954 + .../jquery/test/unit/attributes.js | 1384 + .../jquery/test/unit/callbacks.js | 342 + .../bower_components/jquery/test/unit/core.js | 1387 + .../bower_components/jquery/test/unit/css.js | 1017 + .../bower_components/jquery/test/unit/data.js | 758 + .../jquery/test/unit/deferred.js | 436 + .../jquery/test/unit/deprecated.js | 8 + .../jquery/test/unit/dimensions.js | 473 + .../jquery/test/unit/effects.js | 2204 + .../jquery/test/unit/event.js | 2682 + .../jquery/test/unit/exports.js | 7 + .../jquery/test/unit/manipulation.js | 2121 + .../jquery/test/unit/offset.js | 558 + .../jquery/test/unit/queue.js | 320 + .../jquery/test/unit/selector.js | 172 + .../jquery/test/unit/serialize.js | 148 + .../jquery/test/unit/support.js | 172 + .../jquery/test/unit/traversing.js | 797 + .../bower_components/jquery/test/unit/wrap.js | 265 + .../bower_components/jquery/test/xhtml.php | 5 + OpenNote/controller/NoteBook.php | 298 - OpenNote/controller/NoteEditor.php | 122 - OpenNote/controller/Util.php | 36 - OpenNote/controller/common.php | 34 - .../controller/js/ckeditor/skins/index.html | 0 OpenNote/controller/js/index.html | 0 OpenNote/controller/modules/core/PDO.php | 75 - OpenNote/controller/modules/core/index.html | 0 .../modules/core/interfaces/ICore.php | 33 - .../modules/core/interfaces/index.html | 0 OpenNote/controller/modules/index.html | 0 .../modules/login/Authenticater.php | 156 - OpenNote/controller/modules/login/Config.php | 41 - OpenNote/controller/modules/login/ajax.js | 78 - OpenNote/controller/modules/login/ajax.php | 23 - OpenNote/controller/modules/login/index.php | 90 - OpenNote/controller/modules/loginModule.sh | 6 - OpenNote/controller/upload.php | 45 - OpenNote/index.html | 60 + OpenNote/index.php | 78 - OpenNote/model/Folder.php | 12 - OpenNote/model/Model.php | 257 - OpenNote/model/Note.php | 11 - OpenNote/model/interfaces/IModel.php | 107 - OpenNote/model/sql/OpenNote.sqlite | Bin 7168 -> 0 bytes OpenNote/model/sql/index.html | 0 OpenNote/model/sql/notebook.sql | 61 - .../openNote/controllers/folderController.js | 13 + .../openNote/controllers/loginController.js | 84 + .../directives/randomFadeInDirective.js | 13 + OpenNote/openNote/factories/folderFactory.js | 24 + OpenNote/openNote/openNote.js | 2 + OpenNote/openNote/partials/folderPartial.html | 32 + OpenNote/openNote/partials/loginPartial.html | 46 + OpenNote/openNote/router.js | 15 + OpenNote/openNote/services/userService.js | 59 + .../{ => openNote}/style/dark/note.dark.css | 0 .../{ => openNote}/style/dark/style.dark.css | 12 +- OpenNote/{ => openNote}/style/light/note.css | 0 OpenNote/{ => openNote}/style/light/style.css | 12 +- .../style.css => openNote/style/login.css} | 29 +- .../js/ckeditor/CHANGES.md | 0 .../js/ckeditor/LICENSE.md | 0 .../js/ckeditor/README.md | 0 .../js/ckeditor/build-config.js | 0 .../js/ckeditor/ckeditor.js | 0 .../js/ckeditor/config.js | 0 .../js/ckeditor/config.php | 0 .../js/ckeditor}/index.html | 0 .../js/ckeditor/lang/af.js | 0 .../js/ckeditor/lang/ar.js | 0 .../js/ckeditor/lang/bg.js | 0 .../js/ckeditor/lang/bn.js | 0 .../js/ckeditor/lang/bs.js | 0 .../js/ckeditor/lang/ca.js | 0 .../js/ckeditor/lang/cs.js | 0 .../js/ckeditor/lang/cy.js | 0 .../js/ckeditor/lang/da.js | 0 .../js/ckeditor/lang/de.js | 0 .../js/ckeditor/lang/el.js | 0 .../js/ckeditor/lang/en-au.js | 0 .../js/ckeditor/lang/en-ca.js | 0 .../js/ckeditor/lang/en-gb.js | 0 .../js/ckeditor/lang/en.js | 0 .../js/ckeditor/lang/eo.js | 0 .../js/ckeditor/lang/es.js | 0 .../js/ckeditor/lang/et.js | 0 .../js/ckeditor/lang/eu.js | 0 .../js/ckeditor/lang/fa.js | 0 .../js/ckeditor/lang/fi.js | 0 .../js/ckeditor/lang/fo.js | 0 .../js/ckeditor/lang/fr-ca.js | 0 .../js/ckeditor/lang/fr.js | 0 .../js/ckeditor/lang/gl.js | 0 .../js/ckeditor/lang/gu.js | 0 .../js/ckeditor/lang/he.js | 0 .../js/ckeditor/lang/hi.js | 0 .../js/ckeditor/lang/hr.js | 0 .../js/ckeditor/lang/hu.js | 0 .../js/ckeditor/lang}/index.html | 0 .../js/ckeditor/lang/is.js | 0 .../js/ckeditor/lang/it.js | 0 .../js/ckeditor/lang/ja.js | 0 .../js/ckeditor/lang/ka.js | 0 .../js/ckeditor/lang/km.js | 0 .../js/ckeditor/lang/ko.js | 0 .../js/ckeditor/lang/ku.js | 0 .../js/ckeditor/lang/lt.js | 0 .../js/ckeditor/lang/lv.js | 0 .../js/ckeditor/lang/mk.js | 0 .../js/ckeditor/lang/mn.js | 0 .../js/ckeditor/lang/ms.js | 0 .../js/ckeditor/lang/nb.js | 0 .../js/ckeditor/lang/nl.js | 0 .../js/ckeditor/lang/no.js | 0 .../js/ckeditor/lang/pl.js | 0 .../js/ckeditor/lang/pt-br.js | 0 .../js/ckeditor/lang/pt.js | 0 .../js/ckeditor/lang/ro.js | 0 .../js/ckeditor/lang/ru.js | 0 .../js/ckeditor/lang/sk.js | 0 .../js/ckeditor/lang/sl.js | 0 .../js/ckeditor/lang/sq.js | 0 .../js/ckeditor/lang/sr-latn.js | 0 .../js/ckeditor/lang/sr.js | 0 .../js/ckeditor/lang/sv.js | 0 .../js/ckeditor/lang/th.js | 0 .../js/ckeditor/lang/tr.js | 0 .../js/ckeditor/lang/ug.js | 0 .../js/ckeditor/lang/uk.js | 0 .../js/ckeditor/lang/vi.js | 0 .../js/ckeditor/lang/zh-cn.js | 0 .../js/ckeditor/lang/zh.js | 0 .../js/ckeditor/plugins/.gitignore | 0 .../plugins/a11yhelp/dialogs/a11yhelp.js | 0 .../dialogs/lang/_translationstatus.txt | 0 .../plugins/a11yhelp/dialogs/lang/ar.js | 0 .../plugins/a11yhelp/dialogs/lang/bg.js | 0 .../plugins/a11yhelp/dialogs/lang/ca.js | 0 .../plugins/a11yhelp/dialogs/lang/cs.js | 0 .../plugins/a11yhelp/dialogs/lang/cy.js | 0 .../plugins/a11yhelp/dialogs/lang/da.js | 0 .../plugins/a11yhelp/dialogs/lang/de.js | 0 .../plugins/a11yhelp/dialogs/lang/el.js | 0 .../plugins/a11yhelp/dialogs/lang/en.js | 0 .../plugins/a11yhelp/dialogs/lang/eo.js | 0 .../plugins/a11yhelp/dialogs/lang/es.js | 0 .../plugins/a11yhelp/dialogs/lang/et.js | 0 .../plugins/a11yhelp/dialogs/lang/fa.js | 0 .../plugins/a11yhelp/dialogs/lang/fi.js | 0 .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 0 .../plugins/a11yhelp/dialogs/lang/fr.js | 0 .../plugins/a11yhelp/dialogs/lang/gu.js | 0 .../plugins/a11yhelp/dialogs/lang/he.js | 0 .../plugins/a11yhelp/dialogs/lang/hi.js | 0 .../plugins/a11yhelp/dialogs/lang/hr.js | 0 .../plugins/a11yhelp/dialogs/lang/hu.js | 0 .../plugins/a11yhelp/dialogs/lang/it.js | 0 .../plugins/a11yhelp/dialogs/lang/ja.js | 0 .../plugins/a11yhelp/dialogs/lang/km.js | 0 .../plugins/a11yhelp/dialogs/lang/ku.js | 0 .../plugins/a11yhelp/dialogs/lang/lt.js | 0 .../plugins/a11yhelp/dialogs/lang/lv.js | 0 .../plugins/a11yhelp/dialogs/lang/mk.js | 0 .../plugins/a11yhelp/dialogs/lang/mn.js | 0 .../plugins/a11yhelp/dialogs/lang/nb.js | 0 .../plugins/a11yhelp/dialogs/lang/nl.js | 0 .../plugins/a11yhelp/dialogs/lang/no.js | 0 .../plugins/a11yhelp/dialogs/lang/pl.js | 0 .../plugins/a11yhelp/dialogs/lang/pt-br.js | 0 .../plugins/a11yhelp/dialogs/lang/pt.js | 0 .../plugins/a11yhelp/dialogs/lang/ro.js | 0 .../plugins/a11yhelp/dialogs/lang/ru.js | 0 .../plugins/a11yhelp/dialogs/lang/sk.js | 0 .../plugins/a11yhelp/dialogs/lang/sl.js | 0 .../plugins/a11yhelp/dialogs/lang/sq.js | 0 .../plugins/a11yhelp/dialogs/lang/sv.js | 0 .../plugins/a11yhelp/dialogs/lang/th.js | 0 .../plugins/a11yhelp/dialogs/lang/tr.js | 0 .../plugins/a11yhelp/dialogs/lang/ug.js | 0 .../plugins/a11yhelp/dialogs/lang/uk.js | 0 .../plugins/a11yhelp/dialogs/lang/vi.js | 0 .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 0 .../ckeditor/plugins/about/dialogs/about.js | 0 .../plugins/about/dialogs/logo_ckeditor.png | Bin .../plugins/clipboard/dialogs/paste.js | 0 .../colordialog/dialogs/colordialog.js | 0 .../plugins/dialog/dialogDefinition.js | 0 .../js/ckeditor/plugins/div/dialogs/div.js | 0 .../plugins/fakeobjects/images/spacer.gif | Bin .../js/ckeditor/plugins/find/dialogs/find.js | 0 .../ckeditor/plugins/flash/dialogs/flash.js | 0 .../plugins/flash/images/placeholder.png | Bin .../ckeditor/plugins/forms/dialogs/button.js | 0 .../plugins/forms/dialogs/checkbox.js | 0 .../js/ckeditor/plugins/forms/dialogs/form.js | 0 .../plugins/forms/dialogs/hiddenfield.js | 0 .../ckeditor/plugins/forms/dialogs/radio.js | 0 .../ckeditor/plugins/forms/dialogs/select.js | 0 .../plugins/forms/dialogs/textarea.js | 0 .../plugins/forms/dialogs/textfield.js | 0 .../plugins/forms/images/hiddenfield.gif | Bin .../js/ckeditor/plugins/icons.png | Bin .../ckeditor/plugins/iframe/dialogs/iframe.js | 0 .../plugins/iframe/images/placeholder.png | Bin .../ckeditor/plugins/image/dialogs/image.js | 0 .../ckeditor/plugins/image/images/noimage.png | Bin .../js/ckeditor/plugins}/index.html | 0 .../ckeditor/plugins/link/dialogs/anchor.js | 0 .../js/ckeditor/plugins/link/dialogs/link.js | 0 .../ckeditor/plugins/link/images/anchor.png | Bin .../plugins/liststyle/dialogs/liststyle.js | 0 .../plugins/magicline/images/icon.png | Bin .../plugins/pagebreak/images/pagebreak.gif | Bin .../plugins/pastefromword/filter/default.js | 0 .../js/ckeditor/plugins/preview/preview.html | 0 .../js/ckeditor/plugins/scayt/LICENSE.md | 0 .../js/ckeditor/plugins/scayt/README.md | 0 .../ckeditor/plugins/scayt/dialogs/options.js | 0 .../plugins/scayt/dialogs/toolbar.css | 0 .../showblocks/images/block_address.png | Bin .../showblocks/images/block_blockquote.png | Bin .../plugins/showblocks/images/block_div.png | Bin .../plugins/showblocks/images/block_h1.png | Bin .../plugins/showblocks/images/block_h2.png | Bin .../plugins/showblocks/images/block_h3.png | Bin .../plugins/showblocks/images/block_h4.png | Bin .../plugins/showblocks/images/block_h5.png | Bin .../plugins/showblocks/images/block_h6.png | Bin .../plugins/showblocks/images/block_p.png | Bin .../plugins/showblocks/images/block_pre.png | Bin .../ckeditor/plugins/smiley/dialogs/smiley.js | 0 .../plugins/smiley/images/angel_smile.gif | Bin .../plugins/smiley/images/angry_smile.gif | Bin .../plugins/smiley/images/broken_heart.gif | Bin .../plugins/smiley/images/confused_smile.gif | Bin .../plugins/smiley/images/cry_smile.gif | Bin .../plugins/smiley/images/devil_smile.gif | Bin .../smiley/images/embaressed_smile.gif | Bin .../smiley/images/embarrassed_smile.gif | Bin .../plugins/smiley/images/envelope.gif | Bin .../ckeditor/plugins/smiley/images/heart.gif | Bin .../ckeditor/plugins/smiley/images/kiss.gif | Bin .../plugins/smiley/images/lightbulb.gif | Bin .../plugins/smiley/images/omg_smile.gif | Bin .../plugins/smiley/images/regular_smile.gif | Bin .../plugins/smiley/images/sad_smile.gif | Bin .../plugins/smiley/images/shades_smile.gif | Bin .../plugins/smiley/images/teeth_smile.gif | Bin .../plugins/smiley/images/thumbs_down.gif | Bin .../plugins/smiley/images/thumbs_up.gif | Bin .../plugins/smiley/images/tongue_smile.gif | Bin .../plugins/smiley/images/tounge_smile.gif | Bin .../images/whatchutalkingabout_smile.gif | Bin .../plugins/smiley/images/wink_smile.gif | Bin .../dialogs/lang/_translationstatus.txt | 0 .../plugins/specialchar/dialogs/lang/ca.js | 0 .../plugins/specialchar/dialogs/lang/cs.js | 0 .../plugins/specialchar/dialogs/lang/cy.js | 0 .../plugins/specialchar/dialogs/lang/de.js | 0 .../plugins/specialchar/dialogs/lang/el.js | 0 .../plugins/specialchar/dialogs/lang/en.js | 0 .../plugins/specialchar/dialogs/lang/eo.js | 0 .../plugins/specialchar/dialogs/lang/es.js | 0 .../plugins/specialchar/dialogs/lang/et.js | 0 .../plugins/specialchar/dialogs/lang/fa.js | 0 .../plugins/specialchar/dialogs/lang/fi.js | 0 .../plugins/specialchar/dialogs/lang/fr-ca.js | 0 .../plugins/specialchar/dialogs/lang/fr.js | 0 .../plugins/specialchar/dialogs/lang/he.js | 0 .../plugins/specialchar/dialogs/lang/hr.js | 0 .../plugins/specialchar/dialogs/lang/it.js | 0 .../plugins/specialchar/dialogs/lang/ku.js | 0 .../plugins/specialchar/dialogs/lang/lv.js | 0 .../plugins/specialchar/dialogs/lang/nb.js | 0 .../plugins/specialchar/dialogs/lang/nl.js | 0 .../plugins/specialchar/dialogs/lang/no.js | 0 .../plugins/specialchar/dialogs/lang/pl.js | 0 .../plugins/specialchar/dialogs/lang/pt-br.js | 0 .../plugins/specialchar/dialogs/lang/sk.js | 0 .../plugins/specialchar/dialogs/lang/sq.js | 0 .../plugins/specialchar/dialogs/lang/sv.js | 0 .../plugins/specialchar/dialogs/lang/th.js | 0 .../plugins/specialchar/dialogs/lang/tr.js | 0 .../plugins/specialchar/dialogs/lang/ug.js | 0 .../plugins/specialchar/dialogs/lang/zh-cn.js | 0 .../specialchar/dialogs/specialchar.js | 0 .../ckeditor/plugins/table/dialogs/table.js | 0 .../plugins/tabletools/dialogs/tableCell.js | 0 .../plugins/templates/dialogs/templates.css | 0 .../plugins/templates/dialogs/templates.js | 0 .../plugins/templates/templates/default.js | 0 .../templates/templates/images/template1.gif | Bin .../templates/templates/images/template2.gif | Bin .../templates/templates/images/template3.gif | Bin .../js/ckeditor/plugins/wsc/LICENSE.md | 0 .../js/ckeditor/plugins/wsc/README.md | 0 .../ckeditor/plugins/wsc/dialogs/ciframe.html | 0 .../plugins/wsc/dialogs/tmpFrameset.html | 0 .../js/ckeditor/plugins/wsc/dialogs/wsc.css | 0 .../js/ckeditor/plugins/wsc/dialogs/wsc.js | 0 .../js/ckeditor/samples/ajax.html | 0 .../js/ckeditor/samples/api.html | 0 .../js/ckeditor/samples/appendto.html | 0 .../samples/assets/inlineall/logo.png | Bin .../assets/outputxhtml/outputxhtml.css | 0 .../js/ckeditor/samples/assets/posteddata.php | 0 .../js/ckeditor/samples/assets/sample.css | 0 .../js/ckeditor/samples/assets/sample.jpg | Bin .../samples/assets/uilanguages/languages.js | 0 .../js/ckeditor/samples/datafiltering.html | 0 .../js/ckeditor/samples/divreplace.html | 0 .../js/ckeditor/samples/index.html | 0 .../js/ckeditor/samples/inlineall.html | 0 .../js/ckeditor/samples/inlinebycode.html | 0 .../plugins/dialog/assets/my_dialog.js | 0 .../samples/plugins/dialog/dialog.html | 0 .../samples/plugins/enterkey/enterkey.html | 0 .../assets/outputforflash/outputforflash.fla | Bin .../assets/outputforflash/outputforflash.swf | Bin .../assets/outputforflash/swfobject.js | 0 .../plugins/htmlwriter/outputforflash.html | 0 .../plugins/htmlwriter/outputhtml.html | 0 .../samples/plugins/magicline/magicline.html | 0 .../samples/plugins/toolbar/toolbar.html | 0 .../samples/plugins/wysiwygarea/fullpage.html | 0 .../js/ckeditor/samples/readonly.html | 0 .../js/ckeditor/samples/replacebyclass.html | 0 .../js/ckeditor/samples/replacebycode.html | 0 .../js/ckeditor/samples/sample.css | 0 .../js/ckeditor/samples/sample.js | 0 .../js/ckeditor/samples/sample_posteddata.php | 0 .../js/ckeditor/samples/tabindex.html | 0 .../js/ckeditor/samples/uicolor.html | 0 .../js/ckeditor/samples/uilanguages.html | 0 .../js/ckeditor/samples/xhtmlstyle.html | 0 .../js/ckeditor/skins}/index.html | 0 .../js/ckeditor/skins/moono.dark/dialog.css | 0 .../ckeditor/skins/moono.dark/dialog_ie.css | 0 .../ckeditor/skins/moono.dark/dialog_ie7.css | 0 .../ckeditor/skins/moono.dark/dialog_ie8.css | 0 .../skins/moono.dark/dialog_iequirks.css | 0 .../skins/moono.dark/dialog_opera.css | 0 .../js/ckeditor/skins/moono.dark/editor.css | 0 .../skins/moono.dark/editor_gecko.css | 0 .../ckeditor/skins/moono.dark/editor_ie.css | 0 .../ckeditor/skins/moono.dark/editor_ie7.css | 0 .../ckeditor/skins/moono.dark/editor_ie8.css | 0 .../skins/moono.dark/editor_iequirks.css | 0 .../js/ckeditor/skins/moono.dark/icons.png | Bin .../skins/moono.dark/images/arrow.png | Bin .../skins/moono.dark/images/close.png | Bin .../ckeditor/skins/moono.dark/images/mini.png | Bin .../js/ckeditor/skins/moono.dark/readme.md | 0 .../js/ckeditor/skins/moono/dialog.css | 0 .../js/ckeditor/skins/moono/dialog_ie.css | 0 .../js/ckeditor/skins/moono/dialog_ie7.css | 0 .../js/ckeditor/skins/moono/dialog_ie8.css | 0 .../ckeditor/skins/moono/dialog_iequirks.css | 0 .../js/ckeditor/skins/moono/dialog_opera.css | 0 .../js/ckeditor/skins/moono/editor.css | 0 .../js/ckeditor/skins/moono/editor_gecko.css | 0 .../js/ckeditor/skins/moono/editor_ie.css | 0 .../js/ckeditor/skins/moono/editor_ie7.css | 0 .../js/ckeditor/skins/moono/editor_ie8.css | 0 .../ckeditor/skins/moono/editor_iequirks.css | 0 .../js/ckeditor/skins/moono/icons.png | Bin .../js/ckeditor/skins/moono/images/arrow.png | Bin .../js/ckeditor/skins/moono/images/close.png | Bin .../js/ckeditor/skins/moono/images/mini.png | Bin .../js/ckeditor/skins/moono/readme.md | 0 .../js/ckeditor/styles.js | 0 .../jqueryPlugins/jqdialog/jqdialog.min.css | 6 - .../jqdialog/jqdialog.min.dark.css | 6 - .../js/jqueryPlugins/jqdialog/jqdialog.min.js | 0 .../js/jqueryPlugins/jstree/jquery.jstree.js | 0 .../jqueryPlugins/jstree/themes/default/d.gif | Bin .../jqueryPlugins/jstree/themes/default/d.png | Bin .../jstree/themes/default/style.css | 0 .../jstree/themes/default/throbber.gif | Bin OpenNote/resources/js/login/Login.js | 121 + OpenNote/upload/Download.php | 44 - OpenNote/upload/index.html | 0 636 files changed, 193740 insertions(+), 1989 deletions(-) create mode 100644 .project delete mode 100644 OpenNote.Test/.gitignore create mode 100644 OpenNote.Test/RunTests.cmd create mode 100644 OpenNote.Test/phpunit.phar create mode 100644 OpenNote/.project create mode 100644 OpenNote/Config.js rename OpenNote/{ajax.js.php => ajax.js} (59%) delete mode 100644 OpenNote/ajax.php create mode 100644 OpenNote/bower.json create mode 100644 OpenNote/bower_components/angular-resource/.bower.json create mode 100644 OpenNote/bower_components/angular-resource/README.md create mode 100644 OpenNote/bower_components/angular-resource/angular-resource.js create mode 100644 OpenNote/bower_components/angular-resource/angular-resource.min.js create mode 100644 OpenNote/bower_components/angular-resource/angular-resource.min.js.map create mode 100644 OpenNote/bower_components/angular-resource/bower.json create mode 100644 OpenNote/bower_components/angular-route/.bower.json create mode 100644 OpenNote/bower_components/angular-route/README.md create mode 100644 OpenNote/bower_components/angular-route/angular-route.js create mode 100644 OpenNote/bower_components/angular-route/angular-route.min.js create mode 100644 OpenNote/bower_components/angular-route/angular-route.min.js.map create mode 100644 OpenNote/bower_components/angular-route/bower.json create mode 100644 OpenNote/bower_components/angular/.bower.json create mode 100644 OpenNote/bower_components/angular/README.md create mode 100644 OpenNote/bower_components/angular/angular-csp.css create mode 100644 OpenNote/bower_components/angular/angular.js create mode 100644 OpenNote/bower_components/angular/angular.min.js create mode 100644 OpenNote/bower_components/angular/angular.min.js.gzip create mode 100644 OpenNote/bower_components/angular/angular.min.js.map create mode 100644 OpenNote/bower_components/angular/bower.json create mode 100644 OpenNote/bower_components/bootstrap/.bower.json create mode 100644 OpenNote/bower_components/bootstrap/Gruntfile.js create mode 100644 OpenNote/bower_components/bootstrap/LICENSE create mode 100644 OpenNote/bower_components/bootstrap/README.md create mode 100644 OpenNote/bower_components/bootstrap/bower.json create mode 100644 OpenNote/bower_components/bootstrap/dist/css/bootstrap-theme.css create mode 100644 OpenNote/bower_components/bootstrap/dist/css/bootstrap-theme.css.map create mode 100644 OpenNote/bower_components/bootstrap/dist/css/bootstrap-theme.min.css create mode 100644 OpenNote/bower_components/bootstrap/dist/css/bootstrap.css create mode 100644 OpenNote/bower_components/bootstrap/dist/css/bootstrap.css.map create mode 100644 OpenNote/bower_components/bootstrap/dist/css/bootstrap.min.css create mode 100644 OpenNote/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot create mode 100644 OpenNote/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg create mode 100644 OpenNote/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf create mode 100644 OpenNote/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff create mode 100644 OpenNote/bower_components/bootstrap/dist/js/bootstrap.js create mode 100644 OpenNote/bower_components/bootstrap/dist/js/bootstrap.min.js create mode 100644 OpenNote/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot create mode 100644 OpenNote/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg create mode 100644 OpenNote/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf create mode 100644 OpenNote/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff create mode 100644 OpenNote/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js create mode 100644 OpenNote/bower_components/bootstrap/grunt/bs-lessdoc-parser.js create mode 100644 OpenNote/bower_components/bootstrap/grunt/bs-raw-files-generator.js create mode 100644 OpenNote/bower_components/bootstrap/grunt/shrinkwrap.js create mode 100644 OpenNote/bower_components/bootstrap/js/affix.js create mode 100644 OpenNote/bower_components/bootstrap/js/alert.js create mode 100644 OpenNote/bower_components/bootstrap/js/button.js create mode 100644 OpenNote/bower_components/bootstrap/js/carousel.js create mode 100644 OpenNote/bower_components/bootstrap/js/collapse.js create mode 100644 OpenNote/bower_components/bootstrap/js/dropdown.js create mode 100644 OpenNote/bower_components/bootstrap/js/modal.js create mode 100644 OpenNote/bower_components/bootstrap/js/popover.js create mode 100644 OpenNote/bower_components/bootstrap/js/scrollspy.js create mode 100644 OpenNote/bower_components/bootstrap/js/tab.js create mode 100644 OpenNote/bower_components/bootstrap/js/tooltip.js create mode 100644 OpenNote/bower_components/bootstrap/js/transition.js create mode 100644 OpenNote/bower_components/bootstrap/less/alerts.less create mode 100644 OpenNote/bower_components/bootstrap/less/badges.less create mode 100644 OpenNote/bower_components/bootstrap/less/bootstrap.less create mode 100644 OpenNote/bower_components/bootstrap/less/breadcrumbs.less create mode 100644 OpenNote/bower_components/bootstrap/less/button-groups.less create mode 100644 OpenNote/bower_components/bootstrap/less/buttons.less create mode 100644 OpenNote/bower_components/bootstrap/less/carousel.less create mode 100644 OpenNote/bower_components/bootstrap/less/close.less create mode 100644 OpenNote/bower_components/bootstrap/less/code.less create mode 100644 OpenNote/bower_components/bootstrap/less/component-animations.less create mode 100644 OpenNote/bower_components/bootstrap/less/dropdowns.less create mode 100644 OpenNote/bower_components/bootstrap/less/forms.less create mode 100644 OpenNote/bower_components/bootstrap/less/glyphicons.less create mode 100644 OpenNote/bower_components/bootstrap/less/grid.less create mode 100644 OpenNote/bower_components/bootstrap/less/input-groups.less create mode 100644 OpenNote/bower_components/bootstrap/less/jumbotron.less create mode 100644 OpenNote/bower_components/bootstrap/less/labels.less create mode 100644 OpenNote/bower_components/bootstrap/less/list-group.less create mode 100644 OpenNote/bower_components/bootstrap/less/media.less create mode 100644 OpenNote/bower_components/bootstrap/less/mixins.less create mode 100644 OpenNote/bower_components/bootstrap/less/modals.less create mode 100644 OpenNote/bower_components/bootstrap/less/navbar.less create mode 100644 OpenNote/bower_components/bootstrap/less/navs.less create mode 100644 OpenNote/bower_components/bootstrap/less/normalize.less create mode 100644 OpenNote/bower_components/bootstrap/less/pager.less create mode 100644 OpenNote/bower_components/bootstrap/less/pagination.less create mode 100644 OpenNote/bower_components/bootstrap/less/panels.less create mode 100644 OpenNote/bower_components/bootstrap/less/popovers.less create mode 100644 OpenNote/bower_components/bootstrap/less/print.less create mode 100644 OpenNote/bower_components/bootstrap/less/progress-bars.less create mode 100644 OpenNote/bower_components/bootstrap/less/responsive-utilities.less create mode 100644 OpenNote/bower_components/bootstrap/less/scaffolding.less create mode 100644 OpenNote/bower_components/bootstrap/less/tables.less create mode 100644 OpenNote/bower_components/bootstrap/less/theme.less create mode 100644 OpenNote/bower_components/bootstrap/less/thumbnails.less create mode 100644 OpenNote/bower_components/bootstrap/less/tooltip.less create mode 100644 OpenNote/bower_components/bootstrap/less/type.less create mode 100644 OpenNote/bower_components/bootstrap/less/utilities.less create mode 100644 OpenNote/bower_components/bootstrap/less/variables.less create mode 100644 OpenNote/bower_components/bootstrap/less/wells.less create mode 100644 OpenNote/bower_components/bootstrap/package.json create mode 100644 OpenNote/bower_components/bootstrap/test-infra/README.md create mode 100644 OpenNote/bower_components/bootstrap/test-infra/npm-shrinkwrap.canonical.json create mode 100644 OpenNote/bower_components/bootstrap/test-infra/requirements.txt create mode 100644 OpenNote/bower_components/bootstrap/test-infra/s3_cache.py create mode 100644 OpenNote/bower_components/bootstrap/test-infra/sauce_browsers.yml create mode 100644 OpenNote/bower_components/bootstrap/test-infra/uncached-npm-install.sh create mode 100644 OpenNote/bower_components/jquery/.bower.json create mode 100644 OpenNote/bower_components/jquery/.editorconfig create mode 100644 OpenNote/bower_components/jquery/.gitattributes create mode 100644 OpenNote/bower_components/jquery/.gitignore create mode 100644 OpenNote/bower_components/jquery/.gitmodules create mode 100644 OpenNote/bower_components/jquery/.jshintrc create mode 100644 OpenNote/bower_components/jquery/.mailmap create mode 100644 OpenNote/bower_components/jquery/AUTHORS.txt create mode 100644 OpenNote/bower_components/jquery/CONTRIBUTING.md create mode 100644 OpenNote/bower_components/jquery/Gruntfile.js create mode 100644 OpenNote/bower_components/jquery/MIT-LICENSE.txt create mode 100644 OpenNote/bower_components/jquery/README.md create mode 100644 OpenNote/bower_components/jquery/bower.json create mode 100644 OpenNote/bower_components/jquery/build/release-notes.js create mode 100644 OpenNote/bower_components/jquery/build/release.js create mode 100644 OpenNote/bower_components/jquery/component.json create mode 100644 OpenNote/bower_components/jquery/composer.json create mode 100644 OpenNote/bower_components/jquery/jquery-migrate.js create mode 100644 OpenNote/bower_components/jquery/jquery-migrate.min.js rename OpenNote/{controller/js => bower_components/jquery}/jquery.js (100%) create mode 100644 OpenNote/bower_components/jquery/jquery.min.js create mode 100644 OpenNote/bower_components/jquery/jquery.min.map create mode 100644 OpenNote/bower_components/jquery/package.json create mode 100644 OpenNote/bower_components/jquery/speed/benchmark.js create mode 100644 OpenNote/bower_components/jquery/speed/benchmarker.css create mode 100644 OpenNote/bower_components/jquery/speed/benchmarker.js create mode 100644 OpenNote/bower_components/jquery/speed/closest.html create mode 100644 OpenNote/bower_components/jquery/speed/css.html create mode 100644 OpenNote/bower_components/jquery/speed/event.html create mode 100644 OpenNote/bower_components/jquery/speed/filter.html create mode 100644 OpenNote/bower_components/jquery/speed/find.html create mode 100644 OpenNote/bower_components/jquery/speed/index.html create mode 100644 OpenNote/bower_components/jquery/speed/jquery-basis.js create mode 100644 OpenNote/bower_components/jquery/speed/slice.vs.concat.html create mode 100644 OpenNote/bower_components/jquery/src/.jshintrc create mode 100644 OpenNote/bower_components/jquery/src/ajax.js create mode 100644 OpenNote/bower_components/jquery/src/ajax/jsonp.js create mode 100644 OpenNote/bower_components/jquery/src/ajax/script.js create mode 100644 OpenNote/bower_components/jquery/src/ajax/xhr.js create mode 100644 OpenNote/bower_components/jquery/src/attributes.js create mode 100644 OpenNote/bower_components/jquery/src/callbacks.js create mode 100644 OpenNote/bower_components/jquery/src/core.js create mode 100644 OpenNote/bower_components/jquery/src/css.js create mode 100644 OpenNote/bower_components/jquery/src/data.js create mode 100644 OpenNote/bower_components/jquery/src/deferred.js create mode 100644 OpenNote/bower_components/jquery/src/deprecated.js create mode 100644 OpenNote/bower_components/jquery/src/dimensions.js create mode 100644 OpenNote/bower_components/jquery/src/effects.js create mode 100644 OpenNote/bower_components/jquery/src/event-alias.js create mode 100644 OpenNote/bower_components/jquery/src/event.js create mode 100644 OpenNote/bower_components/jquery/src/exports.js create mode 100644 OpenNote/bower_components/jquery/src/intro.js create mode 100644 OpenNote/bower_components/jquery/src/manipulation.js create mode 100644 OpenNote/bower_components/jquery/src/offset.js create mode 100644 OpenNote/bower_components/jquery/src/outro.js create mode 100644 OpenNote/bower_components/jquery/src/queue.js create mode 100644 OpenNote/bower_components/jquery/src/selector-native.js create mode 100644 OpenNote/bower_components/jquery/src/serialize.js create mode 100644 OpenNote/bower_components/jquery/src/sizzle-jquery.js create mode 100644 OpenNote/bower_components/jquery/src/support.js create mode 100644 OpenNote/bower_components/jquery/src/traversing.js create mode 100644 OpenNote/bower_components/jquery/src/wrap.js create mode 100644 OpenNote/bower_components/jquery/test/.jshintignore create mode 100644 OpenNote/bower_components/jquery/test/.jshintrc create mode 100644 OpenNote/bower_components/jquery/test/data/1x1.jpg create mode 100644 OpenNote/bower_components/jquery/test/data/ajax/unreleasedXHR.html create mode 100644 OpenNote/bower_components/jquery/test/data/atom+xml.php create mode 100644 OpenNote/bower_components/jquery/test/data/badcall.js create mode 100644 OpenNote/bower_components/jquery/test/data/badjson.js create mode 100644 OpenNote/bower_components/jquery/test/data/cleanScript.html create mode 100644 OpenNote/bower_components/jquery/test/data/core/cc_on.html create mode 100644 OpenNote/bower_components/jquery/test/data/core/dont_return.php create mode 100644 OpenNote/bower_components/jquery/test/data/core/dynamic_ready.html create mode 100644 OpenNote/bower_components/jquery/test/data/dashboard.xml create mode 100644 OpenNote/bower_components/jquery/test/data/dimensions/documentLarge.html create mode 100644 OpenNote/bower_components/jquery/test/data/dimensions/documentSmall.html create mode 100644 OpenNote/bower_components/jquery/test/data/echoData.php create mode 100644 OpenNote/bower_components/jquery/test/data/echoQuery.php create mode 100644 OpenNote/bower_components/jquery/test/data/errorWithJSON.php create mode 100644 OpenNote/bower_components/jquery/test/data/errorWithText.php create mode 100644 OpenNote/bower_components/jquery/test/data/etag.php create mode 100644 OpenNote/bower_components/jquery/test/data/evalScript.php create mode 100644 OpenNote/bower_components/jquery/test/data/event/focusElem.html create mode 100644 OpenNote/bower_components/jquery/test/data/event/longLoadScript.php create mode 100644 OpenNote/bower_components/jquery/test/data/event/onbeforeunload.html create mode 100644 OpenNote/bower_components/jquery/test/data/event/promiseReady.html create mode 100644 OpenNote/bower_components/jquery/test/data/event/syncReady.html create mode 100644 OpenNote/bower_components/jquery/test/data/headers.php create mode 100644 OpenNote/bower_components/jquery/test/data/if_modified_since.php create mode 100644 OpenNote/bower_components/jquery/test/data/iframe.html create mode 100644 OpenNote/bower_components/jquery/test/data/jquery-1.9.1.ajax_xhr.min.js create mode 100644 OpenNote/bower_components/jquery/test/data/json.php create mode 100644 OpenNote/bower_components/jquery/test/data/json_obj.js create mode 100644 OpenNote/bower_components/jquery/test/data/jsonp.php create mode 100644 OpenNote/bower_components/jquery/test/data/manipulation/iframe-denied.html create mode 100644 OpenNote/bower_components/jquery/test/data/name.html create mode 100644 OpenNote/bower_components/jquery/test/data/name.php create mode 100644 OpenNote/bower_components/jquery/test/data/nocontent.php create mode 100644 OpenNote/bower_components/jquery/test/data/offset/absolute.html create mode 100644 OpenNote/bower_components/jquery/test/data/offset/body.html create mode 100644 OpenNote/bower_components/jquery/test/data/offset/fixed.html create mode 100644 OpenNote/bower_components/jquery/test/data/offset/relative.html create mode 100644 OpenNote/bower_components/jquery/test/data/offset/scroll.html create mode 100644 OpenNote/bower_components/jquery/test/data/offset/static.html create mode 100644 OpenNote/bower_components/jquery/test/data/offset/table.html create mode 100644 OpenNote/bower_components/jquery/test/data/params_html.php create mode 100644 OpenNote/bower_components/jquery/test/data/readywaitasset.js create mode 100644 OpenNote/bower_components/jquery/test/data/readywaitloader.js create mode 100644 OpenNote/bower_components/jquery/test/data/script.php create mode 100644 OpenNote/bower_components/jquery/test/data/selector/html5_selector.html create mode 100644 OpenNote/bower_components/jquery/test/data/selector/sizzle_cache.html create mode 100644 OpenNote/bower_components/jquery/test/data/statusText.php create mode 100644 OpenNote/bower_components/jquery/test/data/support/bodyBackground.html create mode 100644 OpenNote/bower_components/jquery/test/data/support/boxSizing.html create mode 100644 OpenNote/bower_components/jquery/test/data/support/csp.js create mode 100644 OpenNote/bower_components/jquery/test/data/support/csp.php create mode 100644 OpenNote/bower_components/jquery/test/data/support/shrinkWrapBlocks.html create mode 100644 OpenNote/bower_components/jquery/test/data/support/testElementCrash.html create mode 100644 OpenNote/bower_components/jquery/test/data/test.html create mode 100644 OpenNote/bower_components/jquery/test/data/test.js create mode 100644 OpenNote/bower_components/jquery/test/data/test.php create mode 100644 OpenNote/bower_components/jquery/test/data/test2.html create mode 100644 OpenNote/bower_components/jquery/test/data/test3.html create mode 100644 OpenNote/bower_components/jquery/test/data/testinit.js create mode 100644 OpenNote/bower_components/jquery/test/data/testrunner.js create mode 100644 OpenNote/bower_components/jquery/test/data/testsuite.css create mode 100644 OpenNote/bower_components/jquery/test/data/text.php create mode 100644 OpenNote/bower_components/jquery/test/data/ua.txt create mode 100644 OpenNote/bower_components/jquery/test/data/with_fries.xml create mode 100644 OpenNote/bower_components/jquery/test/data/with_fries_over_jsonp.php create mode 100644 OpenNote/bower_components/jquery/test/delegatetest.html create mode 100644 OpenNote/bower_components/jquery/test/hovertest.html create mode 100644 OpenNote/bower_components/jquery/test/index.html create mode 100644 OpenNote/bower_components/jquery/test/jquery.js create mode 100644 OpenNote/bower_components/jquery/test/localfile.html create mode 100644 OpenNote/bower_components/jquery/test/networkerror.html create mode 100644 OpenNote/bower_components/jquery/test/readywait.html create mode 100644 OpenNote/bower_components/jquery/test/unit/ajax.js create mode 100644 OpenNote/bower_components/jquery/test/unit/attributes.js create mode 100644 OpenNote/bower_components/jquery/test/unit/callbacks.js create mode 100644 OpenNote/bower_components/jquery/test/unit/core.js create mode 100644 OpenNote/bower_components/jquery/test/unit/css.js create mode 100644 OpenNote/bower_components/jquery/test/unit/data.js create mode 100644 OpenNote/bower_components/jquery/test/unit/deferred.js create mode 100644 OpenNote/bower_components/jquery/test/unit/deprecated.js create mode 100644 OpenNote/bower_components/jquery/test/unit/dimensions.js create mode 100644 OpenNote/bower_components/jquery/test/unit/effects.js create mode 100644 OpenNote/bower_components/jquery/test/unit/event.js create mode 100644 OpenNote/bower_components/jquery/test/unit/exports.js create mode 100644 OpenNote/bower_components/jquery/test/unit/manipulation.js create mode 100644 OpenNote/bower_components/jquery/test/unit/offset.js create mode 100644 OpenNote/bower_components/jquery/test/unit/queue.js create mode 100644 OpenNote/bower_components/jquery/test/unit/selector.js create mode 100644 OpenNote/bower_components/jquery/test/unit/serialize.js create mode 100644 OpenNote/bower_components/jquery/test/unit/support.js create mode 100644 OpenNote/bower_components/jquery/test/unit/traversing.js create mode 100644 OpenNote/bower_components/jquery/test/unit/wrap.js create mode 100644 OpenNote/bower_components/jquery/test/xhtml.php delete mode 100644 OpenNote/controller/NoteBook.php delete mode 100644 OpenNote/controller/NoteEditor.php delete mode 100644 OpenNote/controller/Util.php delete mode 100644 OpenNote/controller/common.php delete mode 100644 OpenNote/controller/js/ckeditor/skins/index.html delete mode 100644 OpenNote/controller/js/index.html delete mode 100644 OpenNote/controller/modules/core/PDO.php delete mode 100644 OpenNote/controller/modules/core/index.html delete mode 100644 OpenNote/controller/modules/core/interfaces/ICore.php delete mode 100644 OpenNote/controller/modules/core/interfaces/index.html delete mode 100644 OpenNote/controller/modules/index.html delete mode 100644 OpenNote/controller/modules/login/Authenticater.php delete mode 100644 OpenNote/controller/modules/login/Config.php delete mode 100644 OpenNote/controller/modules/login/ajax.js delete mode 100644 OpenNote/controller/modules/login/ajax.php delete mode 100644 OpenNote/controller/modules/login/index.php delete mode 100644 OpenNote/controller/modules/loginModule.sh delete mode 100644 OpenNote/controller/upload.php create mode 100644 OpenNote/index.html delete mode 100644 OpenNote/index.php delete mode 100644 OpenNote/model/Folder.php delete mode 100644 OpenNote/model/Model.php delete mode 100644 OpenNote/model/Note.php delete mode 100644 OpenNote/model/interfaces/IModel.php delete mode 100644 OpenNote/model/sql/OpenNote.sqlite delete mode 100644 OpenNote/model/sql/index.html delete mode 100644 OpenNote/model/sql/notebook.sql create mode 100644 OpenNote/openNote/controllers/folderController.js create mode 100644 OpenNote/openNote/controllers/loginController.js create mode 100644 OpenNote/openNote/directives/randomFadeInDirective.js create mode 100644 OpenNote/openNote/factories/folderFactory.js create mode 100644 OpenNote/openNote/openNote.js create mode 100644 OpenNote/openNote/partials/folderPartial.html create mode 100644 OpenNote/openNote/partials/loginPartial.html create mode 100644 OpenNote/openNote/router.js create mode 100644 OpenNote/openNote/services/userService.js rename OpenNote/{ => openNote}/style/dark/note.dark.css (100%) rename OpenNote/{ => openNote}/style/dark/style.dark.css (95%) rename OpenNote/{ => openNote}/style/light/note.css (100%) rename OpenNote/{ => openNote}/style/light/style.css (94%) rename OpenNote/{controller/modules/login/style.css => openNote/style/login.css} (73%) rename OpenNote/{controller => resources}/js/ckeditor/CHANGES.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/LICENSE.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/README.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/build-config.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/ckeditor.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/config.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/config.php (100%) rename OpenNote/{controller => resources/js/ckeditor}/index.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/af.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ar.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/bg.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/bn.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/bs.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ca.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/cs.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/cy.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/da.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/de.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/el.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/en-au.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/en-ca.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/en-gb.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/en.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/eo.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/es.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/et.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/eu.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/fa.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/fi.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/fo.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/fr-ca.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/fr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/gl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/gu.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/he.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/hi.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/hr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/hu.js (100%) rename OpenNote/{controller/js/ckeditor => resources/js/ckeditor/lang}/index.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/is.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/it.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ja.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ka.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/km.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ko.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ku.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/lt.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/lv.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/mk.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/mn.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ms.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/nb.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/nl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/no.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/pl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/pt-br.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/pt.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ro.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ru.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/sk.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/sl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/sq.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/sr-latn.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/sr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/sv.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/th.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/tr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/ug.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/uk.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/vi.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/zh-cn.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/lang/zh.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/.gitignore (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/da.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/de.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/el.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/en.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/es.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/et.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/he.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/it.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/km.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/no.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/th.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/about/dialogs/about.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/about/dialogs/logo_ckeditor.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/clipboard/dialogs/paste.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/colordialog/dialogs/colordialog.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/dialog/dialogDefinition.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/div/dialogs/div.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/fakeobjects/images/spacer.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/find/dialogs/find.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/flash/dialogs/flash.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/flash/images/placeholder.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/dialogs/button.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/dialogs/checkbox.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/dialogs/form.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/dialogs/hiddenfield.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/dialogs/radio.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/dialogs/select.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/dialogs/textarea.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/dialogs/textfield.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/forms/images/hiddenfield.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/icons.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/iframe/dialogs/iframe.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/iframe/images/placeholder.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/image/dialogs/image.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/image/images/noimage.png (100%) rename OpenNote/{controller/js/ckeditor/lang => resources/js/ckeditor/plugins}/index.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/link/dialogs/anchor.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/link/dialogs/link.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/link/images/anchor.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/liststyle/dialogs/liststyle.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/magicline/images/icon.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/pagebreak/images/pagebreak.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/pastefromword/filter/default.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/preview/preview.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/scayt/LICENSE.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/scayt/README.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/scayt/dialogs/options.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/scayt/dialogs/toolbar.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_address.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_blockquote.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_div.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_h1.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_h2.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_h3.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_h4.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_h5.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_h6.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_p.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/showblocks/images/block_pre.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/dialogs/smiley.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/angel_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/angry_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/broken_heart.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/confused_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/cry_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/devil_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/embaressed_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/embarrassed_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/envelope.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/heart.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/kiss.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/lightbulb.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/omg_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/regular_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/sad_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/shades_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/teeth_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/thumbs_down.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/thumbs_up.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/tongue_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/tounge_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/smiley/images/wink_smile.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/ca.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/cs.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/cy.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/de.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/el.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/en.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/eo.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/es.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/et.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/fa.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/fi.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/fr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/he.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/hr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/it.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/ku.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/lv.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/nb.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/nl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/no.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/pl.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/sk.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/sq.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/sv.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/th.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/tr.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/ug.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/specialchar/dialogs/specialchar.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/table/dialogs/table.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/tabletools/dialogs/tableCell.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/templates/dialogs/templates.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/templates/dialogs/templates.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/templates/templates/default.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/templates/templates/images/template1.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/templates/templates/images/template2.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/templates/templates/images/template3.gif (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/wsc/LICENSE.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/wsc/README.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/wsc/dialogs/ciframe.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/wsc/dialogs/tmpFrameset.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/wsc/dialogs/wsc.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/plugins/wsc/dialogs/wsc.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/ajax.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/api.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/appendto.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/assets/inlineall/logo.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/assets/outputxhtml/outputxhtml.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/assets/posteddata.php (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/assets/sample.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/assets/sample.jpg (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/assets/uilanguages/languages.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/datafiltering.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/divreplace.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/index.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/inlineall.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/inlinebycode.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/dialog/assets/my_dialog.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/dialog/dialog.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/enterkey/enterkey.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/htmlwriter/outputforflash.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/htmlwriter/outputhtml.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/magicline/magicline.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/toolbar/toolbar.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/plugins/wysiwygarea/fullpage.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/readonly.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/replacebyclass.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/replacebycode.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/sample.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/sample.js (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/sample_posteddata.php (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/tabindex.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/uicolor.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/uilanguages.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/samples/xhtmlstyle.html (100%) rename OpenNote/{controller/js/ckeditor/plugins => resources/js/ckeditor/skins}/index.html (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/dialog.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/dialog_ie.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/dialog_ie7.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/dialog_ie8.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/dialog_iequirks.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/dialog_opera.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/editor.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/editor_gecko.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/editor_ie.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/editor_ie7.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/editor_ie8.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/editor_iequirks.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/icons.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/images/arrow.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/images/close.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/images/mini.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono.dark/readme.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/dialog.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/dialog_ie.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/dialog_ie7.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/dialog_ie8.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/dialog_iequirks.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/dialog_opera.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/editor.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/editor_gecko.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/editor_ie.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/editor_ie7.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/editor_ie8.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/editor_iequirks.css (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/icons.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/images/arrow.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/images/close.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/images/mini.png (100%) rename OpenNote/{controller => resources}/js/ckeditor/skins/moono/readme.md (100%) rename OpenNote/{controller => resources}/js/ckeditor/styles.js (100%) rename OpenNote/{controller => resources}/js/jqueryPlugins/jqdialog/jqdialog.min.css (90%) rename OpenNote/{controller => resources}/js/jqueryPlugins/jqdialog/jqdialog.min.dark.css (89%) rename OpenNote/{controller => resources}/js/jqueryPlugins/jqdialog/jqdialog.min.js (100%) rename OpenNote/{controller => resources}/js/jqueryPlugins/jstree/jquery.jstree.js (100%) rename OpenNote/{controller => resources}/js/jqueryPlugins/jstree/themes/default/d.gif (100%) rename OpenNote/{controller => resources}/js/jqueryPlugins/jstree/themes/default/d.png (100%) rename OpenNote/{controller => resources}/js/jqueryPlugins/jstree/themes/default/style.css (100%) rename OpenNote/{controller => resources}/js/jqueryPlugins/jstree/themes/default/throbber.gif (100%) create mode 100644 OpenNote/resources/js/login/Login.js delete mode 100644 OpenNote/upload/Download.php delete mode 100644 OpenNote/upload/index.html diff --git a/.project b/.project new file mode 100644 index 0000000..a571f2b --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + OpenNote + + + + + + + + diff --git a/.travis.yml b/.travis.yml index 634265d..bb1ff76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,4 +4,4 @@ php: - "5.4" - "5.3" -script: phpunit --configuration ./OpenNote.Test +#script: phpunit --configuration ./OpenNote.Test diff --git a/OpenNote.Test/.gitignore b/OpenNote.Test/.gitignore deleted file mode 100644 index aa3235d..0000000 --- a/OpenNote.Test/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -RunTests.cmd -phpunit.phar -report \ No newline at end of file diff --git a/OpenNote.Test/RunTests.cmd b/OpenNote.Test/RunTests.cmd new file mode 100644 index 0000000..eaaf0d8 --- /dev/null +++ b/OpenNote.Test/RunTests.cmd @@ -0,0 +1,11 @@ +rem Created by Jake Liscom +rem Version 13.12.0 + +SET php="C:\Users\jake\Desktop\Programs\xampp\xampp-win32-1.8.1-VC9\xampp\php\php.exe" +SET phpunit="C:\Users\jake\Desktop\Programing\Web\working\OpenNote.Test\phpunit.phar" + +SET runTest=%php% %phpunit% + +%runTest% --coverage-html ./report + +pause \ No newline at end of file diff --git a/OpenNote.Test/phpunit.phar b/OpenNote.Test/phpunit.phar new file mode 100644 index 0000000..8739aac --- /dev/null +++ b/OpenNote.Test/phpunit.phar @@ -0,0 +1,113059 @@ +#!/usr/bin/env php + '/pear/Archive_Tar/Archive/Tar.php', + 'console_getopt' => '/pear/Console_Getopt/Console/Getopt.php', + 'file_iterator' => '/php-file-iterator/Iterator.php', + 'file_iterator_facade' => '/php-file-iterator/Iterator/Facade.php', + 'file_iterator_factory' => '/php-file-iterator/Iterator/Factory.php', + 'os_guess' => '/pear/PEAR/OS/Guess.php', + 'pear' => '/pear/PEAR/PEAR.php', + 'pear5' => '/pear/PEAR/PEAR5.php', + 'pear_autoloader' => '/pear/PEAR/PEAR/Autoloader.php', + 'pear_builder' => '/pear/PEAR/PEAR/Builder.php', + 'pear_channelfile' => '/pear/PEAR/PEAR/ChannelFile.php', + 'pear_channelfile_parser' => '/pear/PEAR/PEAR/ChannelFile/Parser.php', + 'pear_command' => '/pear/PEAR/PEAR/Command.php', + 'pear_command_auth' => '/pear/PEAR/PEAR/Command/Auth.php', + 'pear_command_build' => '/pear/PEAR/PEAR/Command/Build.php', + 'pear_command_channels' => '/pear/PEAR/PEAR/Command/Channels.php', + 'pear_command_common' => '/pear/PEAR/PEAR/Command/Common.php', + 'pear_command_config' => '/pear/PEAR/PEAR/Command/Config.php', + 'pear_command_install' => '/pear/PEAR/PEAR/Command/Install.php', + 'pear_command_mirror' => '/pear/PEAR/PEAR/Command/Mirror.php', + 'pear_command_package' => '/pear/PEAR/PEAR/Command/Package.php', + 'pear_command_pickle' => '/pear/PEAR/PEAR/Command/Pickle.php', + 'pear_command_registry' => '/pear/PEAR/PEAR/Command/Registry.php', + 'pear_command_remote' => '/pear/PEAR/PEAR/Command/Remote.php', + 'pear_command_test' => '/pear/PEAR/PEAR/Command/Test.php', + 'pear_common' => '/pear/PEAR/PEAR/Common.php', + 'pear_config' => '/pear/PEAR/PEAR/Config.php', + 'pear_dependency2' => '/pear/PEAR/PEAR/Dependency2.php', + 'pear_dependencydb' => '/pear/PEAR/PEAR/DependencyDB.php', + 'pear_downloader' => '/pear/PEAR/PEAR/Downloader.php', + 'pear_downloader_package' => '/pear/PEAR/PEAR/Downloader/Package.php', + 'pear_error' => '/pear/PEAR/PEAR.php', + 'pear_errorstack' => '/pear/PEAR/PEAR/ErrorStack.php', + 'pear_exception' => '/pear/PEAR/PEAR/Exception.php', + 'pear_frontend' => '/pear/PEAR/PEAR/Frontend.php', + 'pear_frontend_cli' => '/pear/PEAR/PEAR/Frontend/CLI.php', + 'pear_installer' => '/pear/PEAR/PEAR/Installer.php', + 'pear_installer_role' => '/pear/PEAR/PEAR/Installer/Role.php', + 'pear_installer_role_cfg' => '/pear/PEAR/PEAR/Installer/Role/Cfg.php', + 'pear_installer_role_common' => '/pear/PEAR/PEAR/Installer/Role/Common.php', + 'pear_installer_role_data' => '/pear/PEAR/PEAR/Installer/Role/Data.php', + 'pear_installer_role_doc' => '/pear/PEAR/PEAR/Installer/Role/Doc.php', + 'pear_installer_role_ext' => '/pear/PEAR/PEAR/Installer/Role/Ext.php', + 'pear_installer_role_php' => '/pear/PEAR/PEAR/Installer/Role/Php.php', + 'pear_installer_role_script' => '/pear/PEAR/PEAR/Installer/Role/Script.php', + 'pear_installer_role_src' => '/pear/PEAR/PEAR/Installer/Role/Src.php', + 'pear_installer_role_test' => '/pear/PEAR/PEAR/Installer/Role/Test.php', + 'pear_installer_role_www' => '/pear/PEAR/PEAR/Installer/Role/Www.php', + 'pear_packagefile' => '/pear/PEAR/PEAR/PackageFile.php', + 'pear_packagefile_generator_v1' => '/pear/PEAR/PEAR/PackageFile/Generator/v1.php', + 'pear_packagefile_generator_v2' => '/pear/PEAR/PEAR/PackageFile/Generator/v2.php', + 'pear_packagefile_parser_v1' => '/pear/PEAR/PEAR/PackageFile/Parser/v1.php', + 'pear_packagefile_parser_v2' => '/pear/PEAR/PEAR/PackageFile/Parser/v2.php', + 'pear_packagefile_v1' => '/pear/PEAR/PEAR/PackageFile/v1.php', + 'pear_packagefile_v2' => '/pear/PEAR/PEAR/PackageFile/v2.php', + 'pear_packagefile_v2_rw' => '/pear/PEAR/PEAR/PackageFile/v2/rw.php', + 'pear_packagefile_v2_validator' => '/pear/PEAR/PEAR/PackageFile/v2/Validator.php', + 'pear_packager' => '/pear/PEAR/PEAR/Packager.php', + 'pear_registry' => '/pear/PEAR/PEAR/Registry.php', + 'pear_rest' => '/pear/PEAR/PEAR/REST.php', + 'pear_rest_10' => '/pear/PEAR/PEAR/REST/10.php', + 'pear_rest_11' => '/pear/PEAR/PEAR/REST/11.php', + 'pear_rest_13' => '/pear/PEAR/PEAR/REST/13.php', + 'pear_runtest' => '/pear/PEAR/PEAR/RunTest.php', + 'pear_task_common' => '/pear/PEAR/PEAR/Task/Common.php', + 'pear_task_postinstallscript' => '/pear/PEAR/PEAR/Task/Postinstallscript.php', + 'pear_task_postinstallscript_rw' => '/pear/PEAR/PEAR/Task/Postinstallscript/rw.php', + 'pear_task_replace' => '/pear/PEAR/PEAR/Task/Replace.php', + 'pear_task_replace_rw' => '/pear/PEAR/PEAR/Task/Replace/rw.php', + 'pear_task_unixeol' => '/pear/PEAR/PEAR/Task/Unixeol.php', + 'pear_task_unixeol_rw' => '/pear/PEAR/PEAR/Task/Unixeol/rw.php', + 'pear_task_windowseol' => '/pear/PEAR/PEAR/Task/Windowseol.php', + 'pear_task_windowseol_rw' => '/pear/PEAR/PEAR/Task/Windowseol/rw.php', + 'pear_validate' => '/pear/PEAR/PEAR/Validate.php', + 'pear_validator_pecl' => '/pear/PEAR/PEAR/Validator/PECL.php', + 'pear_xmlparser' => '/pear/PEAR/PEAR/XMLParser.php', + 'php_codecoverage' => '/php-code-coverage/CodeCoverage.php', + 'php_codecoverage_driver' => '/php-code-coverage/CodeCoverage/Driver.php', + 'php_codecoverage_driver_xdebug' => '/php-code-coverage/CodeCoverage/Driver/Xdebug.php', + 'php_codecoverage_exception' => '/php-code-coverage/CodeCoverage/Exception.php', + 'php_codecoverage_filter' => '/php-code-coverage/CodeCoverage/Filter.php', + 'php_codecoverage_report_clover' => '/php-code-coverage/CodeCoverage/Report/Clover.php', + 'php_codecoverage_report_factory' => '/php-code-coverage/CodeCoverage/Report/Factory.php', + 'php_codecoverage_report_html' => '/php-code-coverage/CodeCoverage/Report/HTML.php', + 'php_codecoverage_report_html_renderer' => '/php-code-coverage/CodeCoverage/Report/HTML/Renderer.php', + 'php_codecoverage_report_html_renderer_dashboard' => '/php-code-coverage/CodeCoverage/Report/HTML/Renderer/Dashboard.php', + 'php_codecoverage_report_html_renderer_directory' => '/php-code-coverage/CodeCoverage/Report/HTML/Renderer/Directory.php', + 'php_codecoverage_report_html_renderer_file' => '/php-code-coverage/CodeCoverage/Report/HTML/Renderer/File.php', + 'php_codecoverage_report_node' => '/php-code-coverage/CodeCoverage/Report/Node.php', + 'php_codecoverage_report_node_directory' => '/php-code-coverage/CodeCoverage/Report/Node/Directory.php', + 'php_codecoverage_report_node_file' => '/php-code-coverage/CodeCoverage/Report/Node/File.php', + 'php_codecoverage_report_node_iterator' => '/php-code-coverage/CodeCoverage/Report/Node/Iterator.php', + 'php_codecoverage_report_php' => '/php-code-coverage/CodeCoverage/Report/PHP.php', + 'php_codecoverage_report_text' => '/php-code-coverage/CodeCoverage/Report/Text.php', + 'php_codecoverage_util' => '/php-code-coverage/CodeCoverage/Util.php', + 'php_codecoverage_util_invalidargumenthelper' => '/php-code-coverage/CodeCoverage/Util/InvalidArgumentHelper.php', + 'php_codecoverage_version' => '/php-code-coverage/CodeCoverage/Version.php', + 'php_invoker' => '/php-invoker/Invoker.php', + 'php_invoker_timeoutexception' => '/php-invoker/Invoker/TimeoutException.php', + 'php_timer' => '/php-timer/Timer.php', + 'php_token' => '/php-token-stream/Token.php', + 'php_token_abstract' => '/php-token-stream/Token.php', + 'php_token_ampersand' => '/php-token-stream/Token.php', + 'php_token_and_equal' => '/php-token-stream/Token.php', + 'php_token_array' => '/php-token-stream/Token.php', + 'php_token_array_cast' => '/php-token-stream/Token.php', + 'php_token_as' => '/php-token-stream/Token.php', + 'php_token_at' => '/php-token-stream/Token.php', + 'php_token_backtick' => '/php-token-stream/Token.php', + 'php_token_bad_character' => '/php-token-stream/Token.php', + 'php_token_bool_cast' => '/php-token-stream/Token.php', + 'php_token_boolean_and' => '/php-token-stream/Token.php', + 'php_token_boolean_or' => '/php-token-stream/Token.php', + 'php_token_break' => '/php-token-stream/Token.php', + 'php_token_callable' => '/php-token-stream/Token.php', + 'php_token_caret' => '/php-token-stream/Token.php', + 'php_token_case' => '/php-token-stream/Token.php', + 'php_token_catch' => '/php-token-stream/Token.php', + 'php_token_character' => '/php-token-stream/Token.php', + 'php_token_class' => '/php-token-stream/Token.php', + 'php_token_class_c' => '/php-token-stream/Token.php', + 'php_token_class_name_constant' => '/php-token-stream/Token.php', + 'php_token_clone' => '/php-token-stream/Token.php', + 'php_token_close_bracket' => '/php-token-stream/Token.php', + 'php_token_close_curly' => '/php-token-stream/Token.php', + 'php_token_close_square' => '/php-token-stream/Token.php', + 'php_token_close_tag' => '/php-token-stream/Token.php', + 'php_token_colon' => '/php-token-stream/Token.php', + 'php_token_comma' => '/php-token-stream/Token.php', + 'php_token_comment' => '/php-token-stream/Token.php', + 'php_token_concat_equal' => '/php-token-stream/Token.php', + 'php_token_const' => '/php-token-stream/Token.php', + 'php_token_constant_encapsed_string' => '/php-token-stream/Token.php', + 'php_token_continue' => '/php-token-stream/Token.php', + 'php_token_curly_open' => '/php-token-stream/Token.php', + 'php_token_dec' => '/php-token-stream/Token.php', + 'php_token_declare' => '/php-token-stream/Token.php', + 'php_token_default' => '/php-token-stream/Token.php', + 'php_token_dir' => '/php-token-stream/Token.php', + 'php_token_div' => '/php-token-stream/Token.php', + 'php_token_div_equal' => '/php-token-stream/Token.php', + 'php_token_dnumber' => '/php-token-stream/Token.php', + 'php_token_do' => '/php-token-stream/Token.php', + 'php_token_doc_comment' => '/php-token-stream/Token.php', + 'php_token_dollar' => '/php-token-stream/Token.php', + 'php_token_dollar_open_curly_braces' => '/php-token-stream/Token.php', + 'php_token_dot' => '/php-token-stream/Token.php', + 'php_token_double_arrow' => '/php-token-stream/Token.php', + 'php_token_double_cast' => '/php-token-stream/Token.php', + 'php_token_double_colon' => '/php-token-stream/Token.php', + 'php_token_double_quotes' => '/php-token-stream/Token.php', + 'php_token_echo' => '/php-token-stream/Token.php', + 'php_token_else' => '/php-token-stream/Token.php', + 'php_token_elseif' => '/php-token-stream/Token.php', + 'php_token_empty' => '/php-token-stream/Token.php', + 'php_token_encapsed_and_whitespace' => '/php-token-stream/Token.php', + 'php_token_end_heredoc' => '/php-token-stream/Token.php', + 'php_token_enddeclare' => '/php-token-stream/Token.php', + 'php_token_endfor' => '/php-token-stream/Token.php', + 'php_token_endforeach' => '/php-token-stream/Token.php', + 'php_token_endif' => '/php-token-stream/Token.php', + 'php_token_endswitch' => '/php-token-stream/Token.php', + 'php_token_endwhile' => '/php-token-stream/Token.php', + 'php_token_equal' => '/php-token-stream/Token.php', + 'php_token_eval' => '/php-token-stream/Token.php', + 'php_token_exclamation_mark' => '/php-token-stream/Token.php', + 'php_token_exit' => '/php-token-stream/Token.php', + 'php_token_extends' => '/php-token-stream/Token.php', + 'php_token_file' => '/php-token-stream/Token.php', + 'php_token_final' => '/php-token-stream/Token.php', + 'php_token_finally' => '/php-token-stream/Token.php', + 'php_token_for' => '/php-token-stream/Token.php', + 'php_token_foreach' => '/php-token-stream/Token.php', + 'php_token_func_c' => '/php-token-stream/Token.php', + 'php_token_function' => '/php-token-stream/Token.php', + 'php_token_global' => '/php-token-stream/Token.php', + 'php_token_goto' => '/php-token-stream/Token.php', + 'php_token_gt' => '/php-token-stream/Token.php', + 'php_token_halt_compiler' => '/php-token-stream/Token.php', + 'php_token_if' => '/php-token-stream/Token.php', + 'php_token_implements' => '/php-token-stream/Token.php', + 'php_token_inc' => '/php-token-stream/Token.php', + 'php_token_include' => '/php-token-stream/Token.php', + 'php_token_include_once' => '/php-token-stream/Token.php', + 'php_token_includes' => '/php-token-stream/Token.php', + 'php_token_inline_html' => '/php-token-stream/Token.php', + 'php_token_instanceof' => '/php-token-stream/Token.php', + 'php_token_insteadof' => '/php-token-stream/Token.php', + 'php_token_int_cast' => '/php-token-stream/Token.php', + 'php_token_interface' => '/php-token-stream/Token.php', + 'php_token_is_equal' => '/php-token-stream/Token.php', + 'php_token_is_greater_or_equal' => '/php-token-stream/Token.php', + 'php_token_is_identical' => '/php-token-stream/Token.php', + 'php_token_is_not_equal' => '/php-token-stream/Token.php', + 'php_token_is_not_identical' => '/php-token-stream/Token.php', + 'php_token_is_smaller_or_equal' => '/php-token-stream/Token.php', + 'php_token_isset' => '/php-token-stream/Token.php', + 'php_token_line' => '/php-token-stream/Token.php', + 'php_token_list' => '/php-token-stream/Token.php', + 'php_token_lnumber' => '/php-token-stream/Token.php', + 'php_token_logical_and' => '/php-token-stream/Token.php', + 'php_token_logical_or' => '/php-token-stream/Token.php', + 'php_token_logical_xor' => '/php-token-stream/Token.php', + 'php_token_lt' => '/php-token-stream/Token.php', + 'php_token_method_c' => '/php-token-stream/Token.php', + 'php_token_minus' => '/php-token-stream/Token.php', + 'php_token_minus_equal' => '/php-token-stream/Token.php', + 'php_token_mod_equal' => '/php-token-stream/Token.php', + 'php_token_mul_equal' => '/php-token-stream/Token.php', + 'php_token_mult' => '/php-token-stream/Token.php', + 'php_token_namespace' => '/php-token-stream/Token.php', + 'php_token_new' => '/php-token-stream/Token.php', + 'php_token_ns_c' => '/php-token-stream/Token.php', + 'php_token_ns_separator' => '/php-token-stream/Token.php', + 'php_token_num_string' => '/php-token-stream/Token.php', + 'php_token_object_cast' => '/php-token-stream/Token.php', + 'php_token_object_operator' => '/php-token-stream/Token.php', + 'php_token_open_bracket' => '/php-token-stream/Token.php', + 'php_token_open_curly' => '/php-token-stream/Token.php', + 'php_token_open_square' => '/php-token-stream/Token.php', + 'php_token_open_tag' => '/php-token-stream/Token.php', + 'php_token_open_tag_with_echo' => '/php-token-stream/Token.php', + 'php_token_or_equal' => '/php-token-stream/Token.php', + 'php_token_paamayim_nekudotayim' => '/php-token-stream/Token.php', + 'php_token_percent' => '/php-token-stream/Token.php', + 'php_token_pipe' => '/php-token-stream/Token.php', + 'php_token_plus' => '/php-token-stream/Token.php', + 'php_token_plus_equal' => '/php-token-stream/Token.php', + 'php_token_print' => '/php-token-stream/Token.php', + 'php_token_private' => '/php-token-stream/Token.php', + 'php_token_protected' => '/php-token-stream/Token.php', + 'php_token_public' => '/php-token-stream/Token.php', + 'php_token_question_mark' => '/php-token-stream/Token.php', + 'php_token_require' => '/php-token-stream/Token.php', + 'php_token_require_once' => '/php-token-stream/Token.php', + 'php_token_return' => '/php-token-stream/Token.php', + 'php_token_semicolon' => '/php-token-stream/Token.php', + 'php_token_sl' => '/php-token-stream/Token.php', + 'php_token_sl_equal' => '/php-token-stream/Token.php', + 'php_token_sr' => '/php-token-stream/Token.php', + 'php_token_sr_equal' => '/php-token-stream/Token.php', + 'php_token_start_heredoc' => '/php-token-stream/Token.php', + 'php_token_static' => '/php-token-stream/Token.php', + 'php_token_stream' => '/php-token-stream/Token/Stream.php', + 'php_token_stream_cachingfactory' => '/php-token-stream/Token/Stream/CachingFactory.php', + 'php_token_string' => '/php-token-stream/Token.php', + 'php_token_string_cast' => '/php-token-stream/Token.php', + 'php_token_string_varname' => '/php-token-stream/Token.php', + 'php_token_switch' => '/php-token-stream/Token.php', + 'php_token_throw' => '/php-token-stream/Token.php', + 'php_token_tilde' => '/php-token-stream/Token.php', + 'php_token_trait' => '/php-token-stream/Token.php', + 'php_token_trait_c' => '/php-token-stream/Token.php', + 'php_token_try' => '/php-token-stream/Token.php', + 'php_token_unset' => '/php-token-stream/Token.php', + 'php_token_unset_cast' => '/php-token-stream/Token.php', + 'php_token_use' => '/php-token-stream/Token.php', + 'php_token_var' => '/php-token-stream/Token.php', + 'php_token_variable' => '/php-token-stream/Token.php', + 'php_token_while' => '/php-token-stream/Token.php', + 'php_token_whitespace' => '/php-token-stream/Token.php', + 'php_token_xor_equal' => '/php-token-stream/Token.php', + 'php_token_yield' => '/php-token-stream/Token.php', + 'php_tokenwithscope' => '/php-token-stream/Token.php', + 'php_tokenwithscopeandvisibility' => '/php-token-stream/Token.php', + 'phpunit_extensions_database_abstracttester' => '/dbunit/Extensions/Database/AbstractTester.php', + 'phpunit_extensions_database_constraint_datasetisequal' => '/dbunit/Extensions/Database/Constraint/DataSetIsEqual.php', + 'phpunit_extensions_database_constraint_tableisequal' => '/dbunit/Extensions/Database/Constraint/TableIsEqual.php', + 'phpunit_extensions_database_constraint_tablerowcount' => '/dbunit/Extensions/Database/Constraint/TableRowCount.php', + 'phpunit_extensions_database_dataset_abstractdataset' => '/dbunit/Extensions/Database/DataSet/AbstractDataSet.php', + 'phpunit_extensions_database_dataset_abstracttable' => '/dbunit/Extensions/Database/DataSet/AbstractTable.php', + 'phpunit_extensions_database_dataset_abstracttablemetadata' => '/dbunit/Extensions/Database/DataSet/AbstractTableMetaData.php', + 'phpunit_extensions_database_dataset_abstractxmldataset' => '/dbunit/Extensions/Database/DataSet/AbstractXmlDataSet.php', + 'phpunit_extensions_database_dataset_compositedataset' => '/dbunit/Extensions/Database/DataSet/CompositeDataSet.php', + 'phpunit_extensions_database_dataset_csvdataset' => '/dbunit/Extensions/Database/DataSet/CsvDataSet.php', + 'phpunit_extensions_database_dataset_datasetfilter' => '/dbunit/Extensions/Database/DataSet/DataSetFilter.php', + 'phpunit_extensions_database_dataset_defaultdataset' => '/dbunit/Extensions/Database/DataSet/DefaultDataSet.php', + 'phpunit_extensions_database_dataset_defaulttable' => '/dbunit/Extensions/Database/DataSet/DefaultTable.php', + 'phpunit_extensions_database_dataset_defaulttableiterator' => '/dbunit/Extensions/Database/DataSet/DefaultTableIterator.php', + 'phpunit_extensions_database_dataset_defaulttablemetadata' => '/dbunit/Extensions/Database/DataSet/DefaultTableMetaData.php', + 'phpunit_extensions_database_dataset_flatxmldataset' => '/dbunit/Extensions/Database/DataSet/FlatXmlDataSet.php', + 'phpunit_extensions_database_dataset_idataset' => '/dbunit/Extensions/Database/DataSet/IDataSet.php', + 'phpunit_extensions_database_dataset_ipersistable' => '/dbunit/Extensions/Database/DataSet/IPersistable.php', + 'phpunit_extensions_database_dataset_ispec' => '/dbunit/Extensions/Database/DataSet/ISpec.php', + 'phpunit_extensions_database_dataset_itable' => '/dbunit/Extensions/Database/DataSet/ITable.php', + 'phpunit_extensions_database_dataset_itableiterator' => '/dbunit/Extensions/Database/DataSet/ITableIterator.php', + 'phpunit_extensions_database_dataset_itablemetadata' => '/dbunit/Extensions/Database/DataSet/ITableMetaData.php', + 'phpunit_extensions_database_dataset_mysqlxmldataset' => '/dbunit/Extensions/Database/DataSet/MysqlXmlDataSet.php', + 'phpunit_extensions_database_dataset_persistors_abstract' => '/dbunit/Extensions/Database/DataSet/Persistors/Abstract.php', + 'phpunit_extensions_database_dataset_persistors_factory' => '/dbunit/Extensions/Database/DataSet/Persistors/Factory.php', + 'phpunit_extensions_database_dataset_persistors_flatxml' => '/dbunit/Extensions/Database/DataSet/Persistors/FlatXml.php', + 'phpunit_extensions_database_dataset_persistors_mysqlxml' => '/dbunit/Extensions/Database/DataSet/Persistors/MysqlXml.php', + 'phpunit_extensions_database_dataset_persistors_xml' => '/dbunit/Extensions/Database/DataSet/Persistors/Xml.php', + 'phpunit_extensions_database_dataset_persistors_yaml' => '/dbunit/Extensions/Database/DataSet/Persistors/Yaml.php', + 'phpunit_extensions_database_dataset_querydataset' => '/dbunit/Extensions/Database/DataSet/QueryDataSet.php', + 'phpunit_extensions_database_dataset_querytable' => '/dbunit/Extensions/Database/DataSet/QueryTable.php', + 'phpunit_extensions_database_dataset_replacementdataset' => '/dbunit/Extensions/Database/DataSet/ReplacementDataSet.php', + 'phpunit_extensions_database_dataset_replacementtable' => '/dbunit/Extensions/Database/DataSet/ReplacementTable.php', + 'phpunit_extensions_database_dataset_replacementtableiterator' => '/dbunit/Extensions/Database/DataSet/ReplacementTableIterator.php', + 'phpunit_extensions_database_dataset_specs_csv' => '/dbunit/Extensions/Database/DataSet/Specs/Csv.php', + 'phpunit_extensions_database_dataset_specs_dbquery' => '/dbunit/Extensions/Database/DataSet/Specs/DbQuery.php', + 'phpunit_extensions_database_dataset_specs_dbtable' => '/dbunit/Extensions/Database/DataSet/Specs/DbTable.php', + 'phpunit_extensions_database_dataset_specs_factory' => '/dbunit/Extensions/Database/DataSet/Specs/Factory.php', + 'phpunit_extensions_database_dataset_specs_flatxml' => '/dbunit/Extensions/Database/DataSet/Specs/FlatXml.php', + 'phpunit_extensions_database_dataset_specs_ifactory' => '/dbunit/Extensions/Database/DataSet/Specs/IFactory.php', + 'phpunit_extensions_database_dataset_specs_xml' => '/dbunit/Extensions/Database/DataSet/Specs/Xml.php', + 'phpunit_extensions_database_dataset_specs_yaml' => '/dbunit/Extensions/Database/DataSet/Specs/Yaml.php', + 'phpunit_extensions_database_dataset_tablefilter' => '/dbunit/Extensions/Database/DataSet/TableFilter.php', + 'phpunit_extensions_database_dataset_tablemetadatafilter' => '/dbunit/Extensions/Database/DataSet/TableMetaDataFilter.php', + 'phpunit_extensions_database_dataset_xmldataset' => '/dbunit/Extensions/Database/DataSet/XmlDataSet.php', + 'phpunit_extensions_database_dataset_yamldataset' => '/dbunit/Extensions/Database/DataSet/YamlDataSet.php', + 'phpunit_extensions_database_db_dataset' => '/dbunit/Extensions/Database/DB/DataSet.php', + 'phpunit_extensions_database_db_defaultdatabaseconnection' => '/dbunit/Extensions/Database/DB/DefaultDatabaseConnection.php', + 'phpunit_extensions_database_db_filtereddataset' => '/dbunit/Extensions/Database/DB/FilteredDataSet.php', + 'phpunit_extensions_database_db_idatabaseconnection' => '/dbunit/Extensions/Database/DB/IDatabaseConnection.php', + 'phpunit_extensions_database_db_imetadata' => '/dbunit/Extensions/Database/DB/IMetaData.php', + 'phpunit_extensions_database_db_metadata' => '/dbunit/Extensions/Database/DB/MetaData.php', + 'phpunit_extensions_database_db_metadata_informationschema' => '/dbunit/Extensions/Database/DB/MetaData/InformationSchema.php', + 'phpunit_extensions_database_db_metadata_mysql' => '/dbunit/Extensions/Database/DB/MetaData/MySQL.php', + 'phpunit_extensions_database_db_metadata_oci' => '/dbunit/Extensions/Database/DB/MetaData/Oci.php', + 'phpunit_extensions_database_db_metadata_pgsql' => '/dbunit/Extensions/Database/DB/MetaData/PgSQL.php', + 'phpunit_extensions_database_db_metadata_sqlite' => '/dbunit/Extensions/Database/DB/MetaData/Sqlite.php', + 'phpunit_extensions_database_db_metadata_sqlsrv' => '/dbunit/Extensions/Database/DB/MetaData/SqlSrv.php', + 'phpunit_extensions_database_db_resultsettable' => '/dbunit/Extensions/Database/DB/ResultSetTable.php', + 'phpunit_extensions_database_db_table' => '/dbunit/Extensions/Database/DB/Table.php', + 'phpunit_extensions_database_db_tableiterator' => '/dbunit/Extensions/Database/DB/TableIterator.php', + 'phpunit_extensions_database_db_tablemetadata' => '/dbunit/Extensions/Database/DB/TableMetaData.php', + 'phpunit_extensions_database_defaulttester' => '/dbunit/Extensions/Database/DefaultTester.php', + 'phpunit_extensions_database_exception' => '/dbunit/Extensions/Database/Exception.php', + 'phpunit_extensions_database_idatabaselistconsumer' => '/dbunit/Extensions/Database/IDatabaseListConsumer.php', + 'phpunit_extensions_database_itester' => '/dbunit/Extensions/Database/ITester.php', + 'phpunit_extensions_database_operation_composite' => '/dbunit/Extensions/Database/Operation/Composite.php', + 'phpunit_extensions_database_operation_delete' => '/dbunit/Extensions/Database/Operation/Delete.php', + 'phpunit_extensions_database_operation_deleteall' => '/dbunit/Extensions/Database/Operation/DeleteAll.php', + 'phpunit_extensions_database_operation_exception' => '/dbunit/Extensions/Database/Operation/Exception.php', + 'phpunit_extensions_database_operation_factory' => '/dbunit/Extensions/Database/Operation/Factory.php', + 'phpunit_extensions_database_operation_idatabaseoperation' => '/dbunit/Extensions/Database/Operation/IDatabaseOperation.php', + 'phpunit_extensions_database_operation_insert' => '/dbunit/Extensions/Database/Operation/Insert.php', + 'phpunit_extensions_database_operation_null' => '/dbunit/Extensions/Database/Operation/Null.php', + 'phpunit_extensions_database_operation_replace' => '/dbunit/Extensions/Database/Operation/Replace.php', + 'phpunit_extensions_database_operation_rowbased' => '/dbunit/Extensions/Database/Operation/RowBased.php', + 'phpunit_extensions_database_operation_truncate' => '/dbunit/Extensions/Database/Operation/Truncate.php', + 'phpunit_extensions_database_operation_update' => '/dbunit/Extensions/Database/Operation/Update.php', + 'phpunit_extensions_database_testcase' => '/dbunit/Extensions/Database/TestCase.php', + 'phpunit_extensions_database_ui_command' => '/dbunit/Extensions/Database/UI/Command.php', + 'phpunit_extensions_database_ui_context' => '/dbunit/Extensions/Database/UI/Context.php', + 'phpunit_extensions_database_ui_imedium' => '/dbunit/Extensions/Database/UI/IMedium.php', + 'phpunit_extensions_database_ui_imediumprinter' => '/dbunit/Extensions/Database/UI/IMediumPrinter.php', + 'phpunit_extensions_database_ui_imode' => '/dbunit/Extensions/Database/UI/IMode.php', + 'phpunit_extensions_database_ui_imodefactory' => '/dbunit/Extensions/Database/UI/IModeFactory.php', + 'phpunit_extensions_database_ui_invalidmodeexception' => '/dbunit/Extensions/Database/UI/InvalidModeException.php', + 'phpunit_extensions_database_ui_mediums_text' => '/dbunit/Extensions/Database/UI/Mediums/Text.php', + 'phpunit_extensions_database_ui_modefactory' => '/dbunit/Extensions/Database/UI/ModeFactory.php', + 'phpunit_extensions_database_ui_modes_exportdataset' => '/dbunit/Extensions/Database/UI/Modes/ExportDataSet.php', + 'phpunit_extensions_database_ui_modes_exportdataset_arguments' => '/dbunit/Extensions/Database/UI/Modes/ExportDataSet/Arguments.php', + 'phpunit_extensions_grouptestsuite' => '/phpunit/Extensions/GroupTestSuite.php', + 'phpunit_extensions_phpttestcase' => '/phpunit/Extensions/PhptTestCase.php', + 'phpunit_extensions_phpttestcase_logger' => '/phpunit/Extensions/PhptTestCase/Logger.php', + 'phpunit_extensions_phpttestsuite' => '/phpunit/Extensions/PhptTestSuite.php', + 'phpunit_extensions_repeatedtest' => '/phpunit/Extensions/RepeatedTest.php', + 'phpunit_extensions_selenium2testcase' => '/phpunit-selenium/Extensions/Selenium2TestCase.php', + 'phpunit_extensions_selenium2testcase_command' => '/phpunit-selenium/Extensions/Selenium2TestCase/Command.php', + 'phpunit_extensions_selenium2testcase_commandsholder' => '/phpunit-selenium/Extensions/Selenium2TestCase/CommandsHolder.php', + 'phpunit_extensions_selenium2testcase_driver' => '/phpunit-selenium/Extensions/Selenium2TestCase/Driver.php', + 'phpunit_extensions_selenium2testcase_element' => '/phpunit-selenium/Extensions/Selenium2TestCase/Element.php', + 'phpunit_extensions_selenium2testcase_element_accessor' => '/phpunit-selenium/Extensions/Selenium2TestCase/Element/Accessor.php', + 'phpunit_extensions_selenium2testcase_element_select' => '/phpunit-selenium/Extensions/Selenium2TestCase/Element/Select.php', + 'phpunit_extensions_selenium2testcase_elementcommand_attribute' => '/phpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Attribute.php', + 'phpunit_extensions_selenium2testcase_elementcommand_click' => '/phpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Click.php', + 'phpunit_extensions_selenium2testcase_elementcommand_css' => '/phpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Css.php', + 'phpunit_extensions_selenium2testcase_elementcommand_equals' => '/phpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Equals.php', + 'phpunit_extensions_selenium2testcase_elementcommand_genericaccessor' => '/phpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/GenericAccessor.php', + 'phpunit_extensions_selenium2testcase_elementcommand_genericpost' => '/phpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/GenericPost.php', + 'phpunit_extensions_selenium2testcase_elementcommand_value' => '/phpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Value.php', + 'phpunit_extensions_selenium2testcase_elementcriteria' => '/phpunit-selenium/Extensions/Selenium2TestCase/ElementCriteria.php', + 'phpunit_extensions_selenium2testcase_exception' => '/phpunit-selenium/Extensions/Selenium2TestCase/Exception.php', + 'phpunit_extensions_selenium2testcase_keys' => '/phpunit-selenium/Extensions/Selenium2TestCase/Keys.php', + 'phpunit_extensions_selenium2testcase_keysholder' => '/phpunit-selenium/Extensions/Selenium2TestCase/KeysHolder.php', + 'phpunit_extensions_selenium2testcase_noseleniumexception' => '/phpunit-selenium/Extensions/Selenium2TestCase/NoSeleniumException.php', + 'phpunit_extensions_selenium2testcase_response' => '/phpunit-selenium/Extensions/Selenium2TestCase/Response.php', + 'phpunit_extensions_selenium2testcase_screenshotlistener' => '/phpunit-selenium/Extensions/Selenium2TestCase/ScreenshotListener.php', + 'phpunit_extensions_selenium2testcase_session' => '/phpunit-selenium/Extensions/Selenium2TestCase/Session.php', + 'phpunit_extensions_selenium2testcase_session_cookie' => '/phpunit-selenium/Extensions/Selenium2TestCase/Session/Cookie.php', + 'phpunit_extensions_selenium2testcase_session_cookie_builder' => '/phpunit-selenium/Extensions/Selenium2TestCase/Session/Cookie/Builder.php', + 'phpunit_extensions_selenium2testcase_session_storage' => '/phpunit-selenium/Extensions/Selenium2TestCase/Session/Storage.php', + 'phpunit_extensions_selenium2testcase_session_timeouts' => '/phpunit-selenium/Extensions/Selenium2TestCase/Session/Timeouts.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_acceptalert' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/AcceptAlert.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_alerttext' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/AlertText.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_click' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Click.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_dismissalert' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/DismissAlert.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_file' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/File.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_frame' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Frame.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_genericaccessor' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/GenericAccessor.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_genericattribute' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/GenericAttribute.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_keys' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Keys.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_location' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Location.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_moveto' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/MoveTo.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_orientation' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Orientation.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_url' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Url.php', + 'phpunit_extensions_selenium2testcase_sessioncommand_window' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Window.php', + 'phpunit_extensions_selenium2testcase_sessionstrategy' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionStrategy.php', + 'phpunit_extensions_selenium2testcase_sessionstrategy_isolated' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionStrategy/Isolated.php', + 'phpunit_extensions_selenium2testcase_sessionstrategy_shared' => '/phpunit-selenium/Extensions/Selenium2TestCase/SessionStrategy/Shared.php', + 'phpunit_extensions_selenium2testcase_statecommand' => '/phpunit-selenium/Extensions/Selenium2TestCase/StateCommand.php', + 'phpunit_extensions_selenium2testcase_url' => '/phpunit-selenium/Extensions/Selenium2TestCase/URL.php', + 'phpunit_extensions_selenium2testcase_waituntil' => '/phpunit-selenium/Extensions/Selenium2TestCase/WaitUntil.php', + 'phpunit_extensions_selenium2testcase_webdriverexception' => '/phpunit-selenium/Extensions/Selenium2TestCase/WebDriverException.php', + 'phpunit_extensions_selenium2testcase_window' => '/phpunit-selenium/Extensions/Selenium2TestCase/Window.php', + 'phpunit_extensions_seleniumbrowsersuite' => '/phpunit-selenium/Extensions/SeleniumBrowserSuite.php', + 'phpunit_extensions_seleniumcommon_exithandler' => '/phpunit-selenium/Extensions/SeleniumCommon/ExitHandler.php', + 'phpunit_extensions_seleniumcommon_remotecoverage' => '/phpunit-selenium/Extensions/SeleniumCommon/RemoteCoverage.php', + 'phpunit_extensions_seleniumtestcase' => '/phpunit-selenium/Extensions/SeleniumTestCase.php', + 'phpunit_extensions_seleniumtestcase_driver' => '/phpunit-selenium/Extensions/SeleniumTestCase/Driver.php', + 'phpunit_extensions_seleniumtestsuite' => '/phpunit-selenium/Extensions/SeleniumTestSuite.php', + 'phpunit_extensions_testdecorator' => '/phpunit/Extensions/TestDecorator.php', + 'phpunit_extensions_ticketlistener' => '/phpunit/Extensions/TicketListener.php', + 'phpunit_framework_assert' => '/phpunit/Framework/Assert.php', + 'phpunit_framework_assertionfailederror' => '/phpunit/Framework/AssertionFailedError.php', + 'phpunit_framework_comparator' => '/phpunit/Framework/Comparator.php', + 'phpunit_framework_comparator_array' => '/phpunit/Framework/Comparator/Array.php', + 'phpunit_framework_comparator_domdocument' => '/phpunit/Framework/Comparator/DOMDocument.php', + 'phpunit_framework_comparator_double' => '/phpunit/Framework/Comparator/Double.php', + 'phpunit_framework_comparator_exception' => '/phpunit/Framework/Comparator/Exception.php', + 'phpunit_framework_comparator_mockobject' => '/phpunit/Framework/Comparator/MockObject.php', + 'phpunit_framework_comparator_numeric' => '/phpunit/Framework/Comparator/Numeric.php', + 'phpunit_framework_comparator_object' => '/phpunit/Framework/Comparator/Object.php', + 'phpunit_framework_comparator_resource' => '/phpunit/Framework/Comparator/Resource.php', + 'phpunit_framework_comparator_scalar' => '/phpunit/Framework/Comparator/Scalar.php', + 'phpunit_framework_comparator_splobjectstorage' => '/phpunit/Framework/Comparator/SplObjectStorage.php', + 'phpunit_framework_comparator_type' => '/phpunit/Framework/Comparator/Type.php', + 'phpunit_framework_comparatorfactory' => '/phpunit/Framework/ComparatorFactory.php', + 'phpunit_framework_comparisonfailure' => '/phpunit/Framework/ComparisonFailure.php', + 'phpunit_framework_constraint' => '/phpunit/Framework/Constraint.php', + 'phpunit_framework_constraint_and' => '/phpunit/Framework/Constraint/And.php', + 'phpunit_framework_constraint_arrayhaskey' => '/phpunit/Framework/Constraint/ArrayHasKey.php', + 'phpunit_framework_constraint_attribute' => '/phpunit/Framework/Constraint/Attribute.php', + 'phpunit_framework_constraint_callback' => '/phpunit/Framework/Constraint/Callback.php', + 'phpunit_framework_constraint_classhasattribute' => '/phpunit/Framework/Constraint/ClassHasAttribute.php', + 'phpunit_framework_constraint_classhasstaticattribute' => '/phpunit/Framework/Constraint/ClassHasStaticAttribute.php', + 'phpunit_framework_constraint_composite' => '/phpunit/Framework/Constraint/Composite.php', + 'phpunit_framework_constraint_count' => '/phpunit/Framework/Constraint/Count.php', + 'phpunit_framework_constraint_exception' => '/phpunit/Framework/Constraint/Exception.php', + 'phpunit_framework_constraint_exceptioncode' => '/phpunit/Framework/Constraint/ExceptionCode.php', + 'phpunit_framework_constraint_exceptionmessage' => '/phpunit/Framework/Constraint/ExceptionMessage.php', + 'phpunit_framework_constraint_fileexists' => '/phpunit/Framework/Constraint/FileExists.php', + 'phpunit_framework_constraint_greaterthan' => '/phpunit/Framework/Constraint/GreaterThan.php', + 'phpunit_framework_constraint_isanything' => '/phpunit/Framework/Constraint/IsAnything.php', + 'phpunit_framework_constraint_isempty' => '/phpunit/Framework/Constraint/IsEmpty.php', + 'phpunit_framework_constraint_isequal' => '/phpunit/Framework/Constraint/IsEqual.php', + 'phpunit_framework_constraint_isfalse' => '/phpunit/Framework/Constraint/IsFalse.php', + 'phpunit_framework_constraint_isidentical' => '/phpunit/Framework/Constraint/IsIdentical.php', + 'phpunit_framework_constraint_isinstanceof' => '/phpunit/Framework/Constraint/IsInstanceOf.php', + 'phpunit_framework_constraint_isjson' => '/phpunit/Framework/Constraint/IsJson.php', + 'phpunit_framework_constraint_isnull' => '/phpunit/Framework/Constraint/IsNull.php', + 'phpunit_framework_constraint_istrue' => '/phpunit/Framework/Constraint/IsTrue.php', + 'phpunit_framework_constraint_istype' => '/phpunit/Framework/Constraint/IsType.php', + 'phpunit_framework_constraint_jsonmatches' => '/phpunit/Framework/Constraint/JsonMatches.php', + 'phpunit_framework_constraint_jsonmatches_errormessageprovider' => '/phpunit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php', + 'phpunit_framework_constraint_lessthan' => '/phpunit/Framework/Constraint/LessThan.php', + 'phpunit_framework_constraint_not' => '/phpunit/Framework/Constraint/Not.php', + 'phpunit_framework_constraint_objecthasattribute' => '/phpunit/Framework/Constraint/ObjectHasAttribute.php', + 'phpunit_framework_constraint_or' => '/phpunit/Framework/Constraint/Or.php', + 'phpunit_framework_constraint_pcrematch' => '/phpunit/Framework/Constraint/PCREMatch.php', + 'phpunit_framework_constraint_samesize' => '/phpunit/Framework/Constraint/SameSize.php', + 'phpunit_framework_constraint_stringcontains' => '/phpunit/Framework/Constraint/StringContains.php', + 'phpunit_framework_constraint_stringendswith' => '/phpunit/Framework/Constraint/StringEndsWith.php', + 'phpunit_framework_constraint_stringmatches' => '/phpunit/Framework/Constraint/StringMatches.php', + 'phpunit_framework_constraint_stringstartswith' => '/phpunit/Framework/Constraint/StringStartsWith.php', + 'phpunit_framework_constraint_traversablecontains' => '/phpunit/Framework/Constraint/TraversableContains.php', + 'phpunit_framework_constraint_traversablecontainsonly' => '/phpunit/Framework/Constraint/TraversableContainsOnly.php', + 'phpunit_framework_constraint_xor' => '/phpunit/Framework/Constraint/Xor.php', + 'phpunit_framework_error' => '/phpunit/Framework/Error.php', + 'phpunit_framework_error_deprecated' => '/phpunit/Framework/Error/Deprecated.php', + 'phpunit_framework_error_notice' => '/phpunit/Framework/Error/Notice.php', + 'phpunit_framework_error_warning' => '/phpunit/Framework/Error/Warning.php', + 'phpunit_framework_exception' => '/phpunit/Framework/Exception.php', + 'phpunit_framework_expectationfailedexception' => '/phpunit/Framework/ExpectationFailedException.php', + 'phpunit_framework_incompletetest' => '/phpunit/Framework/IncompleteTest.php', + 'phpunit_framework_incompletetesterror' => '/phpunit/Framework/IncompleteTestError.php', + 'phpunit_framework_mockobject_builder_identity' => '/phpunit-mock-objects/Framework/MockObject/Builder/Identity.php', + 'phpunit_framework_mockobject_builder_invocationmocker' => '/phpunit-mock-objects/Framework/MockObject/Builder/InvocationMocker.php', + 'phpunit_framework_mockobject_builder_match' => '/phpunit-mock-objects/Framework/MockObject/Builder/Match.php', + 'phpunit_framework_mockobject_builder_methodnamematch' => '/phpunit-mock-objects/Framework/MockObject/Builder/MethodNameMatch.php', + 'phpunit_framework_mockobject_builder_namespace' => '/phpunit-mock-objects/Framework/MockObject/Builder/Namespace.php', + 'phpunit_framework_mockobject_builder_parametersmatch' => '/phpunit-mock-objects/Framework/MockObject/Builder/ParametersMatch.php', + 'phpunit_framework_mockobject_builder_stub' => '/phpunit-mock-objects/Framework/MockObject/Builder/Stub.php', + 'phpunit_framework_mockobject_generator' => '/phpunit-mock-objects/Framework/MockObject/Generator.php', + 'phpunit_framework_mockobject_invocation' => '/phpunit-mock-objects/Framework/MockObject/Invocation.php', + 'phpunit_framework_mockobject_invocation_object' => '/phpunit-mock-objects/Framework/MockObject/Invocation/Object.php', + 'phpunit_framework_mockobject_invocation_static' => '/phpunit-mock-objects/Framework/MockObject/Invocation/Static.php', + 'phpunit_framework_mockobject_invocationmocker' => '/phpunit-mock-objects/Framework/MockObject/InvocationMocker.php', + 'phpunit_framework_mockobject_invokable' => '/phpunit-mock-objects/Framework/MockObject/Invokable.php', + 'phpunit_framework_mockobject_matcher' => '/phpunit-mock-objects/Framework/MockObject/Matcher.php', + 'phpunit_framework_mockobject_matcher_anyinvokedcount' => '/phpunit-mock-objects/Framework/MockObject/Matcher/AnyInvokedCount.php', + 'phpunit_framework_mockobject_matcher_anyparameters' => '/phpunit-mock-objects/Framework/MockObject/Matcher/AnyParameters.php', + 'phpunit_framework_mockobject_matcher_invocation' => '/phpunit-mock-objects/Framework/MockObject/Matcher/Invocation.php', + 'phpunit_framework_mockobject_matcher_invokedatindex' => '/phpunit-mock-objects/Framework/MockObject/Matcher/InvokedAtIndex.php', + 'phpunit_framework_mockobject_matcher_invokedatleastonce' => '/phpunit-mock-objects/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', + 'phpunit_framework_mockobject_matcher_invokedcount' => '/phpunit-mock-objects/Framework/MockObject/Matcher/InvokedCount.php', + 'phpunit_framework_mockobject_matcher_invokedrecorder' => '/phpunit-mock-objects/Framework/MockObject/Matcher/InvokedRecorder.php', + 'phpunit_framework_mockobject_matcher_methodname' => '/phpunit-mock-objects/Framework/MockObject/Matcher/MethodName.php', + 'phpunit_framework_mockobject_matcher_parameters' => '/phpunit-mock-objects/Framework/MockObject/Matcher/Parameters.php', + 'phpunit_framework_mockobject_matcher_statelessinvocation' => '/phpunit-mock-objects/Framework/MockObject/Matcher/StatelessInvocation.php', + 'phpunit_framework_mockobject_mockbuilder' => '/phpunit-mock-objects/Framework/MockObject/MockBuilder.php', + 'phpunit_framework_mockobject_mockobject' => '/phpunit-mock-objects/Framework/MockObject/MockObject.php', + 'phpunit_framework_mockobject_stub' => '/phpunit-mock-objects/Framework/MockObject/Stub.php', + 'phpunit_framework_mockobject_stub_consecutivecalls' => '/phpunit-mock-objects/Framework/MockObject/Stub/ConsecutiveCalls.php', + 'phpunit_framework_mockobject_stub_exception' => '/phpunit-mock-objects/Framework/MockObject/Stub/Exception.php', + 'phpunit_framework_mockobject_stub_matchercollection' => '/phpunit-mock-objects/Framework/MockObject/Stub/MatcherCollection.php', + 'phpunit_framework_mockobject_stub_return' => '/phpunit-mock-objects/Framework/MockObject/Stub/Return.php', + 'phpunit_framework_mockobject_stub_returnargument' => '/phpunit-mock-objects/Framework/MockObject/Stub/ReturnArgument.php', + 'phpunit_framework_mockobject_stub_returncallback' => '/phpunit-mock-objects/Framework/MockObject/Stub/ReturnCallback.php', + 'phpunit_framework_mockobject_stub_returnself' => '/phpunit-mock-objects/Framework/MockObject/Stub/ReturnSelf.php', + 'phpunit_framework_mockobject_stub_returnvaluemap' => '/phpunit-mock-objects/Framework/MockObject/Stub/ReturnValueMap.php', + 'phpunit_framework_mockobject_verifiable' => '/phpunit-mock-objects/Framework/MockObject/Verifiable.php', + 'phpunit_framework_outputerror' => '/phpunit/Framework/OutputError.php', + 'phpunit_framework_selfdescribing' => '/phpunit/Framework/SelfDescribing.php', + 'phpunit_framework_skippedtest' => '/phpunit/Framework/SkippedTest.php', + 'phpunit_framework_skippedtesterror' => '/phpunit/Framework/SkippedTestError.php', + 'phpunit_framework_skippedtestsuiteerror' => '/phpunit/Framework/SkippedTestSuiteError.php', + 'phpunit_framework_syntheticerror' => '/phpunit/Framework/SyntheticError.php', + 'phpunit_framework_test' => '/phpunit/Framework/Test.php', + 'phpunit_framework_testcase' => '/phpunit/Framework/TestCase.php', + 'phpunit_framework_testfailure' => '/phpunit/Framework/TestFailure.php', + 'phpunit_framework_testlistener' => '/phpunit/Framework/TestListener.php', + 'phpunit_framework_testresult' => '/phpunit/Framework/TestResult.php', + 'phpunit_framework_testsuite' => '/phpunit/Framework/TestSuite.php', + 'phpunit_framework_testsuite_dataprovider' => '/phpunit/Framework/TestSuite/DataProvider.php', + 'phpunit_framework_warning' => '/phpunit/Framework/Warning.php', + 'phpunit_runner_basetestrunner' => '/phpunit/Runner/BaseTestRunner.php', + 'phpunit_runner_standardtestsuiteloader' => '/phpunit/Runner/StandardTestSuiteLoader.php', + 'phpunit_runner_testsuiteloader' => '/phpunit/Runner/TestSuiteLoader.php', + 'phpunit_runner_version' => '/phpunit/Runner/Version.php', + 'phpunit_textui_command' => '/phpunit/TextUI/Command.php', + 'phpunit_textui_resultprinter' => '/phpunit/TextUI/ResultPrinter.php', + 'phpunit_textui_testrunner' => '/phpunit/TextUI/TestRunner.php', + 'phpunit_util_class' => '/phpunit/Util/Class.php', + 'phpunit_util_configuration' => '/phpunit/Util/Configuration.php', + 'phpunit_util_deprecatedfeature' => '/phpunit/Util/DeprecatedFeature.php', + 'phpunit_util_deprecatedfeature_logger' => '/phpunit/Util/DeprecatedFeature/Logger.php', + 'phpunit_util_diff' => '/phpunit/Util/Diff.php', + 'phpunit_util_errorhandler' => '/phpunit/Util/ErrorHandler.php', + 'phpunit_util_fileloader' => '/phpunit/Util/Fileloader.php', + 'phpunit_util_filesystem' => '/phpunit/Util/Filesystem.php', + 'phpunit_util_filter' => '/phpunit/Util/Filter.php', + 'phpunit_util_getopt' => '/phpunit/Util/Getopt.php', + 'phpunit_util_globalstate' => '/phpunit/Util/GlobalState.php', + 'phpunit_util_invalidargumenthelper' => '/phpunit/Util/InvalidArgumentHelper.php', + 'phpunit_util_log_json' => '/phpunit/Util/Log/JSON.php', + 'phpunit_util_log_junit' => '/phpunit/Util/Log/JUnit.php', + 'phpunit_util_log_tap' => '/phpunit/Util/Log/TAP.php', + 'phpunit_util_php' => '/phpunit/Util/PHP.php', + 'phpunit_util_php_default' => '/phpunit/Util/PHP/Default.php', + 'phpunit_util_php_windows' => '/phpunit/Util/PHP/Windows.php', + 'phpunit_util_printer' => '/phpunit/Util/Printer.php', + 'phpunit_util_string' => '/phpunit/Util/String.php', + 'phpunit_util_test' => '/phpunit/Util/Test.php', + 'phpunit_util_testdox_nameprettifier' => '/phpunit/Util/TestDox/NamePrettifier.php', + 'phpunit_util_testdox_resultprinter' => '/phpunit/Util/TestDox/ResultPrinter.php', + 'phpunit_util_testdox_resultprinter_html' => '/phpunit/Util/TestDox/ResultPrinter/HTML.php', + 'phpunit_util_testdox_resultprinter_text' => '/phpunit/Util/TestDox/ResultPrinter/Text.php', + 'phpunit_util_testsuiteiterator' => '/phpunit/Util/TestSuiteIterator.php', + 'phpunit_util_type' => '/phpunit/Util/Type.php', + 'phpunit_util_xml' => '/phpunit/Util/XML.php', + 'structures_graph' => '/pear/Structures_Graph/Structures/Graph.php', + 'structures_graph_manipulator_acyclictest' => '/pear/Structures_Graph/Structures/Graph/Manipulator/AcyclicTest.php', + 'structures_graph_manipulator_topologicalsorter' => '/pear/Structures_Graph/Structures/Graph/Manipulator/TopologicalSorter.php', + 'structures_graph_node' => '/pear/Structures_Graph/Structures/Graph/Node.php', + 'symfony\\component\\yaml\\dumper' => '/symfony/yaml/Symfony/Component/Yaml/Dumper.php', + 'symfony\\component\\yaml\\escaper' => '/symfony/yaml/Symfony/Component/Yaml/Escaper.php', + 'symfony\\component\\yaml\\exception\\dumpexception' => '/symfony/yaml/Symfony/Component/Yaml/Exception/DumpException.php', + 'symfony\\component\\yaml\\exception\\exceptioninterface' => '/symfony/yaml/Symfony/Component/Yaml/Exception/ExceptionInterface.php', + 'symfony\\component\\yaml\\exception\\parseexception' => '/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php', + 'symfony\\component\\yaml\\exception\\runtimeexception' => '/symfony/yaml/Symfony/Component/Yaml/Exception/RuntimeException.php', + 'symfony\\component\\yaml\\inline' => '/symfony/yaml/Symfony/Component/Yaml/Inline.php', + 'symfony\\component\\yaml\\parser' => '/symfony/yaml/Symfony/Component/Yaml/Parser.php', + 'symfony\\component\\yaml\\unescaper' => '/symfony/yaml/Symfony/Component/Yaml/Unescaper.php', + 'symfony\\component\\yaml\\yaml' => '/symfony/yaml/Symfony/Component/Yaml/Yaml.php', + 'system' => '/pear/PEAR/System.php', + 'text_template' => '/php-text-template/Template.php', + 'xml_util' => '/pear/XML_Util/XML/Util.php' + ); + } + + $class = strtolower($class); + + if (isset($classes[$class])) { + require 'phar://phpunit-3.7.28.phar' . $classes[$class]; + } + } +); + +Phar::mapPhar('phpunit-3.7.28.phar'); + +if ($GLOBALS['_SERVER']['SCRIPT_NAME'] != '-') { + PHPUnit_TextUI_Command::main(); +} + +__HALT_COMPILER(); ?> +3…Âphpunit-3.7.28.phar,symfony/yaml/Symfony/Component/Yaml/Yaml.php ’_R 7MÓº¶.symfony/yaml/Symfony/Component/Yaml/Dumper.php” ’_R” 8¹n¶@symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.phpî ’_Rî ®¿œ›¶Dsymfony/yaml/Symfony/Component/Yaml/Exception/ExceptionInterface.phpÆ’_RÆî+­l¶Bsymfony/yaml/Symfony/Component/Yaml/Exception/RuntimeException.phpð’_RðÏ|-¶?symfony/yaml/Symfony/Component/Yaml/Exception/DumpException.phpÒ’_RÒؙ՚¶.symfony/yaml/Symfony/Component/Yaml/Parser.phpY\’_RY\»S?y¶1symfony/yaml/Symfony/Component/Yaml/Unescaper.php›’_R›±h¶.symfony/yaml/Symfony/Component/Yaml/Inline.php¯=’_R¯=>jݶ/symfony/yaml/Symfony/Component/Yaml/Escaper.phpi ’_Ri ἶ"php-code-coverage/CodeCoverage.php*Y’_R*Y0:*U¶=php-code-coverage/CodeCoverage/Util/InvalidArgumentHelper.phpW ’_RW “Y½)¶0php-code-coverage/CodeCoverage/Driver/Xdebug.php¿ ’_R¿ ¦ei¶'php-code-coverage/CodeCoverage/Util.phpË'’_RË'jý¼š¶,php-code-coverage/CodeCoverage/Exception.phpú ’_Rú +u:¶)php-code-coverage/CodeCoverage/Driver.php¸ +’_R¸ +n …¶)php-code-coverage/CodeCoverage/Filter.phpí'’_Rí'[‘µí¶*php-code-coverage/CodeCoverage/Version.php< ’_R< ˃¢€¶.php-code-coverage/CodeCoverage/Report/Node.php*%’_R*%’B©ó¶3php-code-coverage/CodeCoverage/Report/Node/File.phpR’_RR\-¡Ç¶7php-code-coverage/CodeCoverage/Report/Node/Iterator.php’_Ru¾¶8php-code-coverage/CodeCoverage/Report/Node/Directory.php#0’_R#03µ¶7php-code-coverage/CodeCoverage/Report/HTML/Renderer.phpˆ#’_Rˆ#^Qš¶<php-code-coverage/CodeCoverage/Report/HTML/Renderer/File.phpKT’_RKTck²V¶Sphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/coverage_bar.html.distŽ’_RŽ­¾¶Yphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/img/glyphicons-halflings.pngÿ1’_Rÿ1ëV(F¶_php-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/img/glyphicons-halflings-white.pngI"’_RI"¤‹€C¶Pphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/file_item.html.dist;’_R;rS¶Pphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/directory.html.dist˜’_R˜Àp¬W¶Rphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/css/bootstrap.min.css’“’_R’“®ñak¶]php-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/css/bootstrap-responsive.min.css©@’_R©@¢±÷T¶Jphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/css/style.cssq’_Rq +¹*µ¶Uphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/directory_item.html.dist ’_R -“,—¶Rphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/method_item.html.distX’_RX%ŽJ¶Kphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/file.html.dist’_R´`Öâ¶Pphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/js/bootstrap.min.jsl{’_Rl{áôš¶Lphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/js/html5shiv.jsH ’_RH «Õ߶Mphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/js/highcharts.jsåä’_Råä~K&¶Mphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/js/jquery.min.jsÕi’_RÕi´v„¶Pphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Template/dashboard.html.dist> ’_R> ßI¦š¶Aphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Directory.phpŽ’_RŽ[ »J¶Aphp-code-coverage/CodeCoverage/Report/HTML/Renderer/Dashboard.php¥’_R¥/MKU¶.php-code-coverage/CodeCoverage/Report/HTML.php’_RÀáz¥¶-php-code-coverage/CodeCoverage/Report/PHP.php{ ’_R{ ð=Œ¶.php-code-coverage/CodeCoverage/Report/Text.php6+’_R6+ 8R¶0php-code-coverage/CodeCoverage/Report/Clover.phpÍ2’_RÍ2)†Ö¶1php-code-coverage/CodeCoverage/Report/Factory.php2’_R2Õö[î¶php-timer/Timer.php6’_R6#X6ñ¶!phpunit/Framework/TestFailure.phpŸ’_RŸy…x˶'phpunit/Framework/ComparatorFactory.phpI’_RIèØZ\¶+phpunit/Framework/SkippedTestSuiteError.php: +’_R: +õ±c¶phpunit/Framework/Assert.phpJe’_RJe$—z¶phpunit/Framework/TestCase.php·Ò’_R·Ò*õͶ&phpunit/Framework/Assert/Functions.php ú’_R úÆ­ì8¶)phpunit/Framework/IncompleteTestError.php9 +’_R9 +—do¶!phpunit/Framework/OutputError.php +’_R +ŠCÐg¶phpunit/Framework/Exception.php¬ ’_R¬ ¿/`?¶phpunit/Framework/Warning.php5’_R5ež¶'phpunit/Framework/ComparisonFailure.php­’_R­ëÄM¶&phpunit/Framework/SkippedTestError.php/ +’_R/ +aà,*¶3phpunit/Framework/Constraint/ObjectHasAttribute.phpL ’_RL »;2¶*phpunit/Framework/Constraint/PCREMatch.phpJ’_RJeâm¶.phpunit/Framework/Constraint/ExceptionCode.phpy’_Ry)V»¶-phpunit/Framework/Constraint/IsInstanceOf.phpã’_Rãc§¨ý¶)phpunit/Framework/Constraint/SameSize.php ’_R !n+‘¶(phpunit/Framework/Constraint/IsEqual.php–’_R–çZȶ'phpunit/Framework/Constraint/IsNull.php ’_R 8®î$¶'phpunit/Framework/Constraint/IsJson.phpÂ’_RÂxVZP¶'phpunit/Framework/Constraint/IsTrue.php ’_R ,+ÜͶ,phpunit/Framework/Constraint/ArrayHasKey.php™’_R™'ÑFÙ¶,phpunit/Framework/Constraint/IsIdentical.phpI’_RIÝ¢é¶*phpunit/Framework/Constraint/Exception.phpD’_RD-xDɶ$phpunit/Framework/Constraint/And.phpÎ’_RÎQ¨ï€¶8phpunit/Framework/Constraint/TraversableContainsOnly.phpI’_RIê L½¶)phpunit/Framework/Constraint/Callback.php{’_R{‚Q™c¶$phpunit/Framework/Constraint/Not.phpc’_Rc`ü:¶2phpunit/Framework/Constraint/ClassHasAttribute.phpC’_RC­¤ô“¶Aphpunit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php›’_R›nY¤¶,phpunit/Framework/Constraint/GreaterThan.phpY ’_RY c׆¶+phpunit/Framework/Constraint/IsAnything.php ’_R ZèµM¶/phpunit/Framework/Constraint/StringContains.phpÂ’_RÂõÂdj¶4phpunit/Framework/Constraint/TraversableContains.php’_R­µ÷¶)phpunit/Framework/Constraint/LessThan.phpP ’_RP >”–µ¶.phpunit/Framework/Constraint/StringMatches.php;’_R;$–n:¶*phpunit/Framework/Constraint/Composite.php’_RG$a|¶1phpunit/Framework/Constraint/ExceptionMessage.php[’_R[h¢9¶+phpunit/Framework/Constraint/FileExists.phpY’_RYCÅ”©¶*phpunit/Framework/Constraint/Attribute.php’_RÞ ¶#phpunit/Framework/Constraint/Or.php’_R¸Å+¶/phpunit/Framework/Constraint/StringEndsWith.phpg ’_Rg qR ¥¶8phpunit/Framework/Constraint/ClassHasStaticAttribute.php)’_R)Òîi¶(phpunit/Framework/Constraint/IsFalse.php$ ’_R$ c{ðR¶1phpunit/Framework/Constraint/StringStartsWith.phpV ’_RV u/<¿¶,phpunit/Framework/Constraint/JsonMatches.php’_Rùª$¸¶(phpunit/Framework/Constraint/IsEmpty.phpj’_RjØ·Eò¶&phpunit/Framework/Constraint/Count.phpþ’_Rþï‡È)¶$phpunit/Framework/Constraint/Xor.phpy’_Ry%(í¶'phpunit/Framework/Constraint/IsType.phpÏ’_RÏÈZ-Ÿ¶ phpunit/Framework/Constraint.php‹’_R‹¼¶<dbunit/Extensions/Database/DB/MetaData/InformationSchema.phpÏ’_RÏwÖ)¶.dbunit/Extensions/Database/DB/MetaData/Oci.phpV’_RV(’¡!¶0dbunit/Extensions/Database/DB/MetaData/PgSQL.php‚’_R‚,¼@¶1dbunit/Extensions/Database/DB/MetaData/Sqlite.php’_R3‹E¶0dbunit/Extensions/Database/DB/MetaData/MySQL.phpÖ’_RÖÖ=P¶1dbunit/Extensions/Database/DB/MetaData/SqlSrv.php¥’_R¥¾æ¶/dbunit/Extensions/Database/DB/TableMetaData.php ’_R ùyj¶0dbunit/Extensions/Database/DB/ResultSetTable.phpé ’_Ré >é²U¶*dbunit/Extensions/Database/DB/MetaData.php½’_R½ØßŶ'dbunit/Extensions/Database/TestCase.php'%’_R'%)4K¶)dbunit/Extensions/Database/UI/Command.phpR ’_RR ö¶)dbunit/Extensions/Database/UI/IMedium.phpY ’_RY !ƒŽ¶?dbunit/Extensions/Database/UI/Modes/ExportDataSet/Arguments.php’_R¦_R¶5dbunit/Extensions/Database/UI/Modes/ExportDataSet.phpû’_RûOW5¶-dbunit/Extensions/Database/UI/ModeFactory.php)’_R)©ôÄg¶.dbunit/Extensions/Database/UI/Mediums/Text.php¡’_R¡)Q¾ ¶)dbunit/Extensions/Database/UI/Context.php ’_R `—¶•¶6dbunit/Extensions/Database/UI/InvalidModeException.phpÌ ’_RÌ XjS¶'dbunit/Extensions/Database/UI/IMode.php½ +’_R½ +~#1¶0dbunit/Extensions/Database/UI/IMediumPrinter.php¯ +’_R¯ + GaM¶.dbunit/Extensions/Database/UI/IModeFactory.phpô +’_Rô +tYÙo¶2dbunit/Extensions/Database/Operation/Exception.phpÊ’_RÊ­Ée ¶/dbunit/Extensions/Database/Operation/Delete.php’_RS˜*Ù¶/dbunit/Extensions/Database/Operation/Insert.phpÙ’_RÙ®-¬6¶1dbunit/Extensions/Database/Operation/RowBased.phpB’_RB7÷‚¶2dbunit/Extensions/Database/Operation/DeleteAll.php¢ ’_R¢ ´Õ;¶/dbunit/Extensions/Database/Operation/Update.php§’_R§>Cý¶-dbunit/Extensions/Database/Operation/Null.php” +’_R” +<°Ö‡¶;dbunit/Extensions/Database/Operation/IDatabaseOperation.phpÓ ’_RÓ #ºÙ¶2dbunit/Extensions/Database/Operation/Composite.php’_Ru“T¶1dbunit/Extensions/Database/Operation/Truncate.php¾ ’_R¾ Ñ¡xw¶0dbunit/Extensions/Database/Operation/Replace.php]’_R]Ó>ŽA¶0dbunit/Extensions/Database/Operation/Factory.php¸’_R¸4Z ¶(dbunit/Extensions/Database/Exception.php + +’_R + +35.¶6dbunit/Extensions/Database/Constraint/TableIsEqual.phpd’_RdÑØǶ8dbunit/Extensions/Database/Constraint/DataSetIsEqual.phpr’_Rrl.\¶7dbunit/Extensions/Database/Constraint/TableRowCount.phpc ’_Rc |ßU'¶4dbunit/Extensions/Database/IDatabaseListConsumer.phpA +’_RA +; +Ãå¶3dbunit/Extensions/Database/DataSet/QueryDataSet.phpo’_Ro>g4¶6dbunit/Extensions/Database/DataSet/MysqlXmlDataSet.php/’_R/“7úû¶1dbunit/Extensions/Database/DataSet/QueryTable.php’_R—ç—à¶,dbunit/Extensions/Database/DataSet/ISpec.php‰ +’_R‰ +,*üh¶:dbunit/Extensions/Database/DataSet/TableMetaDataFilter.php*’_R*»å¶9dbunit/Extensions/Database/DataSet/AbstractXmlDataSet.phpÓ’_RÓjCl:¶-dbunit/Extensions/Database/DataSet/ITable.php ’_R £!þE¶3dbunit/Extensions/Database/DataSet/DefaultTable.php„’_R„˜ˆül¶?dbunit/Extensions/Database/DataSet/ReplacementTableIterator.php’_R–˜Ù_¶9dbunit/Extensions/Database/DataSet/ReplacementDataSet.php`’_R`@ª€¶/dbunit/Extensions/Database/DataSet/IDataSet.phpÐ ’_RÐ ·íš¶5dbunit/Extensions/Database/DataSet/DefaultDataSet.php— ’_R— î.g¶7dbunit/Extensions/Database/DataSet/ReplacementTable.php’_R …Ÿ¶4dbunit/Extensions/Database/DataSet/AbstractTable.phpÖ’_RÖ§ÿ¶5dbunit/Extensions/Database/DataSet/ITableIterator.php + ’_R + ”R®¶1dbunit/Extensions/Database/DataSet/CsvDataSet.phpØ’_RØçä€|¶;dbunit/Extensions/Database/DataSet/DefaultTableMetaData.php¢ ’_R¢ ‚»¶1dbunit/Extensions/Database/DataSet/Specs/Yaml.php³ ’_R³ 9•6¶0dbunit/Extensions/Database/DataSet/Specs/Xml.php­ ’_R­ þPɶ5dbunit/Extensions/Database/DataSet/Specs/IFactory.phpQ +’_RQ +–_¶0dbunit/Extensions/Database/DataSet/Specs/Csv.phpa’_Ra›cæÚ¶4dbunit/Extensions/Database/DataSet/Specs/DbTable.php„’_R„ì)˶4dbunit/Extensions/Database/DataSet/Specs/DbQuery.phpß’_Rß]~ ¶4dbunit/Extensions/Database/DataSet/Specs/FlatXml.phpÇ ’_RÇ ±ÿ B¶4dbunit/Extensions/Database/DataSet/Specs/Factory.php¿ ’_R¿ xɤ\¶;dbunit/Extensions/Database/DataSet/DefaultTableIterator.php–’_R–( hɶ4dbunit/Extensions/Database/DataSet/DataSetFilter.php’_RT–n/¶5dbunit/Extensions/Database/DataSet/ITableMetaData.php8 ’_R8 ¼X—K¶6dbunit/Extensions/Database/DataSet/AbstractDataSet.php©’_R©žåOj¶1dbunit/Extensions/Database/DataSet/XmlDataSet.phpÄ’_RĦ»ï¶6dbunit/Extensions/Database/DataSet/Persistors/Yaml.phpí’_Rí¸²¿¶5dbunit/Extensions/Database/DataSet/Persistors/Xml.php’_Rpòú¶:dbunit/Extensions/Database/DataSet/Persistors/MysqlXml.phpÄ’_RÄ"Bý ¶:dbunit/Extensions/Database/DataSet/Persistors/Abstract.phpó’_RóÑBì¶9dbunit/Extensions/Database/DataSet/Persistors/FlatXml.phpj’_RjÂ}Âê¶9dbunit/Extensions/Database/DataSet/Persistors/Factory.phpÐ ’_RÐ hãR8¶3dbunit/Extensions/Database/DataSet/IPersistable.php” +’_R” +Y­è¶5dbunit/Extensions/Database/DataSet/FlatXmlDataSet.phpV’_RV¿JIò¶7dbunit/Extensions/Database/DataSet/CompositeDataSet.phpG’_RGE1CE¶2dbunit/Extensions/Database/DataSet/YamlDataSet.php’_R^V¡¶<dbunit/Extensions/Database/DataSet/AbstractTableMetaData.phpè’_Rè×¹/¶2dbunit/Extensions/Database/DataSet/TableFilter.php¼’_R¼É2»‚¶-dbunit/Extensions/Database/AbstractTester.php$’_R$Õ?#T¶,dbunit/Extensions/Database/DefaultTester.php¯ ’_R¯ ¦¸¨¶&dbunit/Extensions/Database/ITester.phpª’_RªZ6°p¶!php-token-stream/Token/Stream.phpuD’_RuDršSͶ0php-token-stream/Token/Stream/CachingFactory.phpø ’_Rø Ó’Õ¶php-token-stream/Token.php‘[’_R‘[@@Õ¶pear/XML_Util/XML/Util.phpèv’_Rèv;F³¶ pear/Archive_Tar/Archive/Tar.php~’_R~û5g¶*pear/Structures_Graph/Structures/Graph.phps’_Rs7ƒúŠ¶/pear/Structures_Graph/Structures/Graph/Node.php(+’_R(+óéà¶Bpear/Structures_Graph/Structures/Graph/Manipulator/AcyclicTest.phpp’_Rp#¢Š¶Hpear/Structures_Graph/Structures/Graph/Manipulator/TopologicalSorter.php&’_R&®ž‡Š¶&pear/Console_Getopt/Console/Getopt.php4’_R4[WwŽ¶pear/PEAR/OS/Guess.phpœ)’_Rœ) Iv ¶pear/PEAR/PEAR.phpi„’_Ri„-B²¶pear/PEAR/scripts/peclcmd.phpž’_RžÊ»¶pear/PEAR/scripts/pearcmd.phpe8’_Re8 ,¿Õ¶pear/PEAR/PEAR5.php?’_R?ßxʶpear/PEAR/System.phpO’_RO£ng<¶!pear/PEAR/PEAR/Command/Mirror.phpò’_Rò~×1¶"pear/PEAR/PEAR/Command/Install.phpžÆ’_RžÆŽòøK¶!pear/PEAR/PEAR/Command/Common.phpd ’_Rd ˜á¶pear/PEAR/PEAR/Command/Auth.php^ +’_R^ +œ§ØL¶"pear/PEAR/PEAR/Command/Package.phpS’_RS_i÷¶#pear/PEAR/PEAR/Command/Channels.phpÿ‚’_Rÿ‚B©œp¶!pear/PEAR/PEAR/Command/Remote.phpvu’_RvuÙo?è¶!pear/PEAR/PEAR/Command/Pickle.phpn>’_Rn>2™_Ķ pear/PEAR/PEAR/Command/Build.php+ ’_R+ ab ¶#pear/PEAR/PEAR/Command/Registry.phpµ’_RµËßѶ!pear/PEAR/PEAR/Command/Config.phpn<’_Rn<¨šjȶpear/PEAR/PEAR/Command/Test.php¶.’_R¶.&SuY¶pear/PEAR/PEAR/Packager.phpi’_RiÓ å¶pear/PEAR/PEAR/RunTest.php‚’_R‚/ñ¶pear/PEAR/PEAR/Autoloader.php¥’_R¥vP ·¶!pear/PEAR/PEAR/Validator/PECL.php}’_R}°ßón¶pear/PEAR/PEAR/Command.php›1’_R›1³†ù¶%pear/PEAR/PEAR/Installer/Role/Www.phpL’_RLÊa¶(pear/PEAR/PEAR/Installer/Role/Common.php›’_R›÷϶(pear/PEAR/PEAR/Installer/Role/Script.phpY’_RY¼2"¶%pear/PEAR/PEAR/Installer/Role/Src.phpµ’_Rµð¶£¶&pear/PEAR/PEAR/Installer/Role/Data.phpS’_RS·ÜŒ¶%pear/PEAR/PEAR/Installer/Role/Cfg.phpÂ’_R¸©ï¶%pear/PEAR/PEAR/Installer/Role/Php.phpP’_RPËÊsç¶%pear/PEAR/PEAR/Installer/Role/Ext.phpP’_RP^zÞw¶&pear/PEAR/PEAR/Installer/Role/Test.phpS’_RS‡xÙ_¶%pear/PEAR/PEAR/Installer/Role/Doc.phpP’_RP_ˆ°/¶!pear/PEAR/PEAR/Installer/Role.php4’_R4׸=¶pear/PEAR/PEAR/Common.php­d’_R­d¨ÅH3¶pear/PEAR/PEAR/ErrorStack.php©„’_R©„ê$Qè¶pear/PEAR/PEAR/Exception.php¶6’_R¶6,€—¶pear/PEAR/PEAR/REST/10.phpÔ’_RÔKMœ±¶pear/PEAR/PEAR/REST/11.php,,’_R,,Hå[ñ¶pear/PEAR/PEAR/REST/13.phpd-’_Rd-!Û÷¶pear/PEAR/PEAR/Frontend.php?’_R?ƾ/¶&pear/PEAR/PEAR/FixPHP5PEARWarnings.php™’_R™ßq‚C¶pear/PEAR/PEAR/PackageFile.php->’_R->Á=µ¶pear/PEAR/PEAR/Frontend/CLI.phpŽd’_RŽdSvY•¶pear/PEAR/PEAR/Downloader.php’_R8¡á›¶pear/PEAR/PEAR/REST.phpOC’_ROCé•‹¶%pear/PEAR/PEAR/Downloader/Package.php¦)’_R¦)÷‰¶pear/PEAR/PEAR/Builder.php¬A’_R¬A6L™”¶%pear/PEAR/PEAR/ChannelFile/Parser.phpò’_RòÇZ/¶pear/PEAR/PEAR/Dependency2.phpOÅ’_ROÅÎA±G¶pear/PEAR/PEAR/XMLParser.php’_R4ò¥*¶pear/PEAR/PEAR/Validate.php-V’_R-VÎá—‡¶,pear/PEAR/PEAR/Task/Postinstallscript/rw.phpÉ’_RÉnK{v¶"pear/PEAR/PEAR/Task/Replace/rw.phpM’_RMÅÑê¶pear/PEAR/PEAR/Task/Common.phpÞ’_RÞžÁjª¶%pear/PEAR/PEAR/Task/Windowseol/rw.phpr’_Rr>Tq›¶"pear/PEAR/PEAR/Task/Unixeol/rw.php]’_R]A"¶pear/PEAR/PEAR/Task/Unixeol.phpá’_Rá©BK#¶pear/PEAR/PEAR/Task/Replace.phpš’_RšL'Cζ)pear/PEAR/PEAR/Task/Postinstallscript.phpR8’_RR8æ.,O¶"pear/PEAR/PEAR/Task/Windowseol.phpÝ’_RÝ~~–¶+pear/PEAR/PEAR/PackageFile/Generator/v1.phpâÄ’_RâÄD;»}¶+pear/PEAR/PEAR/PackageFile/Generator/v2.phpð‚’_Rð‚ ÔÒ}¶!pear/PEAR/PEAR/PackageFile/v1.phpðÇ’_RðÇí¹@^¶(pear/PEAR/PEAR/PackageFile/Parser/v1.phpÌ@’_RÌ@úâB’_R>BáÁ3—¶7phpunit-selenium/Extensions/SeleniumTestCase/Driver.php^«’_R^«7'q߶4phpunit-selenium/Extensions/SeleniumBrowserSuite.phpò’_RòD³¥¶0phpunit-selenium/Extensions/SeleniumTestCase.php®–’_R®–uÿÎý¶Dphpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Css.phpi ’_Ri ó¶Pphpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/GenericAccessor.phpi +’_Ri +•Pe¶Gphpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Equals.php` ’_R` Én±Õ¶Lphpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/GenericPost.phpW +’_RW +ëLq¶Fphpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Value.php +’_R +¶.Ú$¶Jphpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Attribute.phpt ’_Rt  ˈ¶Fphpunit-selenium/Extensions/Selenium2TestCase/ElementCommand/Click.php+ +’_R+ +¡Ä»¶<phpunit-selenium/Extensions/Selenium2TestCase/KeysHolder.php’_RÑ|ÚH¶Bphpunit-selenium/Extensions/Selenium2TestCase/Element/Accessor.php¯’_R¯û\w€¶@phpunit-selenium/Extensions/Selenium2TestCase/Element/Select.php­’_R­?m®O¶9phpunit-selenium/Extensions/Selenium2TestCase/Command.phpL ’_RL Îcyƶ;phpunit-selenium/Extensions/Selenium2TestCase/Exception.phpã ’_Rã H"Ç[¶8phpunit-selenium/Extensions/Selenium2TestCase/Driver.php.’_R.·û¶>phpunit-selenium/Extensions/Selenium2TestCase/StateCommand.phpw +’_Rw + e3Z¶:phpunit-selenium/Extensions/Selenium2TestCase/Response.php’_RþM¶Ephpunit-selenium/Extensions/Selenium2TestCase/NoSeleniumException.phpÅ ’_RÅ Ûök¶Dphpunit-selenium/Extensions/Selenium2TestCase/WebDriverException.phpf ’_Rf ÍK1ï¶9phpunit-selenium/Extensions/Selenium2TestCase/Session.php,’_R,³7áQ¶Jphpunit-selenium/Extensions/Selenium2TestCase/SessionStrategy/Isolated.php’ ’_R’ ìͶHphpunit-selenium/Extensions/Selenium2TestCase/SessionStrategy/Shared.phpH’_RHÚVm’¶8phpunit-selenium/Extensions/Selenium2TestCase/Window.phpO ’_RO S§ßô¶5phpunit-selenium/Extensions/Selenium2TestCase/URL.php™’_R™HFž¶6phpunit-selenium/Extensions/Selenium2TestCase/Keys.phpI’_RIî†Í¶Aphpunit-selenium/Extensions/Selenium2TestCase/Session/Storage.php8 ’_R8 ›‚º¶@phpunit-selenium/Extensions/Selenium2TestCase/Session/Cookie.phpý’_Rý$!¸–¶Hphpunit-selenium/Extensions/Selenium2TestCase/Session/Cookie/Builder.php’_RÓ¸q¶Bphpunit-selenium/Extensions/Selenium2TestCase/Session/Timeouts.phpY’_RYýÕB’¶Aphpunit-selenium/Extensions/Selenium2TestCase/SessionStrategy.php¡ ’_R¡ ̳ãr¶Aphpunit-selenium/Extensions/Selenium2TestCase/ElementCriteria.phpN ’_RN ʶIphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Location.phpË ’_RË ¾Þ2¶Ephpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/File.phpâ’_Râåô"y¶Mphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/DismissAlert.php6 +’_R6 +Ñv’l¶Fphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Frame.php¶ ’_R¶ çz"¶Pphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/GenericAccessor.phpT +’_RT +X·ì¶Dphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Url.php ’_R K¸Ž¶Jphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/AlertText.phpC ’_RC lXim¶Gphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Window.phpÜ +’_RÜ +•ˆ’¶Ephpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Keys.php$’_R$wîͶGphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/MoveTo.phpÏ’_RÏ•¦§¶Qphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/GenericAttribute.phpŸ +’_RŸ +›Bí¶Lphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/AcceptAlert.php1 +’_R1 +BHǶLphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Orientation.phpÚ ’_RÚ oá÷n¶Fphpunit-selenium/Extensions/Selenium2TestCase/SessionCommand/Click.php» ’_R» ^ÿaé¶Dphpunit-selenium/Extensions/Selenium2TestCase/ScreenshotListener.php‡’_R‡Ö»]¶9phpunit-selenium/Extensions/Selenium2TestCase/Element.phpÉ’_RÉ“¸û¡¶@phpunit-selenium/Extensions/Selenium2TestCase/CommandsHolder.phpË’_RËZew¶;phpunit-selenium/Extensions/Selenium2TestCase/WaitUntil.php„’_R„Ã$H„¶6phpunit-selenium/Extensions/SeleniumCommon/prepend.php? ’_R? °·³¶:phpunit-selenium/Extensions/SeleniumCommon/ExitHandler.phpû’_Rûñ¯ÿe¶=phpunit-selenium/Extensions/SeleniumCommon/RemoteCoverage.php>’_R>*dBʶ?phpunit-selenium/Extensions/SeleniumCommon/phpunit_coverage.php¥ ’_R¥ ow™¶5phpunit-selenium/Extensions/SeleniumCommon/append.php ’_R ›·ú÷¶7phpunit-mock-objects/Framework/MockObject/Invokable.phpI ’_RI ÷À¶Gphpunit-mock-objects/Framework/MockObject/Generator/wsdl_class.tpl.distµ’_RµŽ§¶Kphpunit-mock-objects/Framework/MockObject/Generator/unmocked_clone.tpl.distŸ’_RŸ8W}ضQphpunit-mock-objects/Framework/MockObject/Generator/mocked_object_method.tpl.dist„’_R„ãbVæ¶Hphpunit-mock-objects/Framework/MockObject/Generator/wsdl_method.tpl.dist<’_R<¾Ði‰¶Qphpunit-mock-objects/Framework/MockObject/Generator/mocked_static_method.tpl.dist‰’_R‰>¦K¶Iphpunit-mock-objects/Framework/MockObject/Generator/mocked_class.tpl.dist‚’_R‚Àb)¶Iphpunit-mock-objects/Framework/MockObject/Generator/mocked_clone.tpl.dist„’_R„œaT¶Hphpunit-mock-objects/Framework/MockObject/Generator/trait_class.tpl.dist-’_R-˜1°,¶7phpunit-mock-objects/Framework/MockObject/Generator.php1i’_R1iõZ‘I¶@phpunit-mock-objects/Framework/MockObject/Matcher/MethodName.phpV’_RV%i´Ò¶Hphpunit-mock-objects/Framework/MockObject/Matcher/InvokedAtLeastOnce.phpC ’_RC ΰhU¶Ephpunit-mock-objects/Framework/MockObject/Matcher/InvokedRecorder.phpß’_Rß䶶Cphpunit-mock-objects/Framework/MockObject/Matcher/AnyParameters.phpº ’_Rº ·-‘¶Bphpunit-mock-objects/Framework/MockObject/Matcher/InvokedCount.php†’_R†Á`Š;¶Ephpunit-mock-objects/Framework/MockObject/Matcher/AnyInvokedCount.phpU ’_RU @9Ó¶@phpunit-mock-objects/Framework/MockObject/Matcher/Parameters.php¯’_R¯(–ü?¶@phpunit-mock-objects/Framework/MockObject/Matcher/Invocation.php©’_R© ¸T¶Iphpunit-mock-objects/Framework/MockObject/Matcher/StatelessInvocation.php’_R¯C‡Ö¶Dphpunit-mock-objects/Framework/MockObject/Matcher/InvokedAtIndex.php‰’_R‰¹§à¶9phpunit-mock-objects/Framework/MockObject/MockBuilder.php‡’_R‡ q¶5phpunit-mock-objects/Framework/MockObject/Matcher.phpÀ&’_RÀ&wƒq¶>phpunit-mock-objects/Framework/MockObject/InvocationMocker.php ’_R 7¹20¶?phpunit-mock-objects/Framework/MockObject/Invocation/Static.phpR’_RRîk#¶?phpunit-mock-objects/Framework/MockObject/Invocation/Object.php ’_R ÐZí¼¶9phpunit-mock-objects/Framework/MockObject/Stub/Return.phpÓ ’_RÓ 6Ë×ú¶Dphpunit-mock-objects/Framework/MockObject/Stub/MatcherCollection.phpv ’_Rv æ<œ¶Aphpunit-mock-objects/Framework/MockObject/Stub/ReturnArgument.phpy ’_Ry Ò:¶=phpunit-mock-objects/Framework/MockObject/Stub/ReturnSelf.php¤ ’_R¤ ÙÞ¶<phpunit-mock-objects/Framework/MockObject/Stub/Exception.phpn ’_Rn žl1–¶Cphpunit-mock-objects/Framework/MockObject/Stub/ConsecutiveCalls.php" ’_R" ÆMmÔ¶Aphpunit-mock-objects/Framework/MockObject/Stub/ReturnCallback.php’_Rqëù^¶Aphpunit-mock-objects/Framework/MockObject/Stub/ReturnValueMap.phpö ’_Rö z%Xu¶8phpunit-mock-objects/Framework/MockObject/Verifiable.php' ’_R' %”íû¶8phpunit-mock-objects/Framework/MockObject/Invocation.php +’_R +à#Þ¢¶2phpunit-mock-objects/Framework/MockObject/Stub.phpi ’_Ri 6Õ)/¶Ephpunit-mock-objects/Framework/MockObject/Builder/ParametersMatch.phpu’_RuöIø¶;phpunit-mock-objects/Framework/MockObject/Builder/Match.php„ ’_R„ DR:°¶Fphpunit-mock-objects/Framework/MockObject/Builder/InvocationMocker.phpÐ’_RÐÝ[6¡¶?phpunit-mock-objects/Framework/MockObject/Builder/Namespace.phpš ’_Rš ú>ͶEphpunit-mock-objects/Framework/MockObject/Builder/MethodNameMatch.php ’_R ‰ß(0¶>phpunit-mock-objects/Framework/MockObject/Builder/Identity.php ’_R ÐoåÓ¶:phpunit-mock-objects/Framework/MockObject/Builder/Stub.php× ’_R× æVmö8phpunit-mock-objects/Framework/MockObject/MockObject.php­’_R­?¼ÎR¶ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Yaml offers convenience methods to load and dump YAML. + * + * @author Fabien Potencier + * + * @api + */ +class Yaml +{ + /** + * Parses YAML into a PHP array. + * + * The parse method, when supplied with a YAML stream (string or file), + * will do its best to convert YAML in a file into a PHP array. + * + * Usage: + * + * $array = Yaml::parse('config.yml'); + * print_r($array); + * + * + * As this method accepts both plain strings and file names as an input, + * you must validate the input before calling this method. Passing a file + * as an input is a deprecated feature and will be removed in 3.0. + * + * @param string $input Path to a YAML file or a string containing YAML + * @param Boolean $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise + * @param Boolean $objectSupport True if object support is enabled, false otherwise + * + * @return array The YAML converted to a PHP array + * + * @throws ParseException If the YAML is not valid + * + * @api + */ + public static function parse($input, $exceptionOnInvalidType = false, $objectSupport = false) + { + // if input is a file, process it + $file = ''; + if (strpos($input, "\n") === false && is_file($input)) { + if (false === is_readable($input)) { + throw new ParseException(sprintf('Unable to parse "%s" as the file is not readable.', $input)); + } + + $file = $input; + $input = file_get_contents($file); + } + + $yaml = new Parser(); + + try { + return $yaml->parse($input, $exceptionOnInvalidType, $objectSupport); + } catch (ParseException $e) { + if ($file) { + $e->setParsedFile($file); + } + + throw $e; + } + } + + /** + * Dumps a PHP array to a YAML string. + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. + * + * @param array $array PHP array + * @param integer $inline The level where you switch to inline YAML + * @param integer $indent The amount of spaces to use for indentation of nested nodes. + * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise + * @param Boolean $objectSupport true if object support is enabled, false otherwise + * + * @return string A YAML string representing the original PHP array + * + * @api + */ + public static function dump($array, $inline = 2, $indent = 4, $exceptionOnInvalidType = false, $objectSupport = false) + { + $yaml = new Dumper(); + $yaml->setIndentation($indent); + + return $yaml->dump($array, $inline, 0, $exceptionOnInvalidType, $objectSupport); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +/** + * Dumper dumps PHP variables to YAML strings. + * + * @author Fabien Potencier + */ +class Dumper +{ + /** + * The amount of spaces to use for indentation of nested nodes. + * + * @var integer + */ + protected $indentation = 4; + + /** + * Sets the indentation. + * + * @param integer $num The amount of spaces to use for indentation of nested nodes. + */ + public function setIndentation($num) + { + $this->indentation = (int) $num; + } + + /** + * Dumps a PHP value to YAML. + * + * @param mixed $input The PHP value + * @param integer $inline The level where you switch to inline YAML + * @param integer $indent The level of indentation (used internally) + * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise + * @param Boolean $objectSupport true if object support is enabled, false otherwise + * + * @return string The YAML representation of the PHP value + */ + public function dump($input, $inline = 0, $indent = 0, $exceptionOnInvalidType = false, $objectSupport = false) + { + $output = ''; + $prefix = $indent ? str_repeat(' ', $indent) : ''; + + if ($inline <= 0 || !is_array($input) || empty($input)) { + $output .= $prefix.Inline::dump($input, $exceptionOnInvalidType, $objectSupport); + } else { + $isAHash = array_keys($input) !== range(0, count($input) - 1); + + foreach ($input as $key => $value) { + $willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value); + + $output .= sprintf('%s%s%s%s', + $prefix, + $isAHash ? Inline::dump($key, $exceptionOnInvalidType, $objectSupport).':' : '-', + $willBeInlined ? ' ' : "\n", + $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $exceptionOnInvalidType, $objectSupport) + ).($willBeInlined ? "\n" : ''); + } + } + + return $output; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +if (!defined('JSON_UNESCAPED_UNICODE')) { + define('JSON_UNESCAPED_SLASHES', 64); + define('JSON_UNESCAPED_UNICODE', 256); +} + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Fabien Potencier + * + * @api + */ +class ParseException extends RuntimeException +{ + private $parsedFile; + private $parsedLine; + private $snippet; + private $rawMessage; + + /** + * Constructor. + * + * @param string $message The error message + * @param integer $parsedLine The line where the error occurred + * @param integer $snippet The snippet of code near the problem + * @param string $parsedFile The file name where the error occurred + * @param \Exception $previous The previous exception + */ + public function __construct($message, $parsedLine = -1, $snippet = null, $parsedFile = null, \Exception $previous = null) + { + $this->parsedFile = $parsedFile; + $this->parsedLine = $parsedLine; + $this->snippet = $snippet; + $this->rawMessage = $message; + + $this->updateRepr(); + + parent::__construct($this->message, 0, $previous); + } + + /** + * Gets the snippet of code near the error. + * + * @return string The snippet of code + */ + public function getSnippet() + { + return $this->snippet; + } + + /** + * Sets the snippet of code near the error. + * + * @param string $snippet The code snippet + */ + public function setSnippet($snippet) + { + $this->snippet = $snippet; + + $this->updateRepr(); + } + + /** + * Gets the filename where the error occurred. + * + * This method returns null if a string is parsed. + * + * @return string The filename + */ + public function getParsedFile() + { + return $this->parsedFile; + } + + /** + * Sets the filename where the error occurred. + * + * @param string $parsedFile The filename + */ + public function setParsedFile($parsedFile) + { + $this->parsedFile = $parsedFile; + + $this->updateRepr(); + } + + /** + * Gets the line where the error occurred. + * + * @return integer The file line + */ + public function getParsedLine() + { + return $this->parsedLine; + } + + /** + * Sets the line where the error occurred. + * + * @param integer $parsedLine The file line + */ + public function setParsedLine($parsedLine) + { + $this->parsedLine = $parsedLine; + + $this->updateRepr(); + } + + private function updateRepr() + { + $this->message = $this->rawMessage; + + $dot = false; + if ('.' === substr($this->message, -1)) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + if (null !== $this->parsedFile) { + $this->message .= sprintf(' in %s', json_encode($this->parsedFile, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + } + + if ($this->parsedLine >= 0) { + $this->message .= sprintf(' at line %d', $this->parsedLine); + } + + if ($this->snippet) { + $this->message .= sprintf(' (near "%s")', $this->snippet); + } + + if ($dot) { + $this->message .= '.'; + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception interface for all exceptions thrown by the component. + * + * @author Fabien Potencier + * + * @api + */ +interface ExceptionInterface +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Romain Neutron + * + * @api + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during dumping. + * + * @author Fabien Potencier + * + * @api + */ +class DumpException extends RuntimeException +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Parser parses YAML strings to convert them to PHP arrays. + * + * @author Fabien Potencier + */ +class Parser +{ + const FOLDED_SCALAR_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; + + private $offset = 0; + private $lines = array(); + private $currentLineNb = -1; + private $currentLine = ''; + private $refs = array(); + + /** + * Constructor + * + * @param integer $offset The offset of YAML document (used for line numbers in error messages) + */ + public function __construct($offset = 0) + { + $this->offset = $offset; + } + + /** + * Parses a YAML string to a PHP value. + * + * @param string $value A YAML string + * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise + * @param Boolean $objectSupport true if object support is enabled, false otherwise + * + * @return mixed A PHP value + * + * @throws ParseException If the YAML is not valid + */ + public function parse($value, $exceptionOnInvalidType = false, $objectSupport = false) + { + $this->currentLineNb = -1; + $this->currentLine = ''; + $this->lines = explode("\n", $this->cleanup($value)); + + if (function_exists('mb_detect_encoding') && false === mb_detect_encoding($value, 'UTF-8', true)) { + throw new ParseException('The YAML value does not appear to be valid UTF-8.'); + } + + if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { + $mbEncoding = mb_internal_encoding(); + mb_internal_encoding('UTF-8'); + } + + $data = array(); + $context = null; + while ($this->moveToNextLine()) { + if ($this->isCurrentLineEmpty()) { + continue; + } + + // tab? + if ("\t" === $this->currentLine[0]) { + throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + $isRef = $isInPlace = $isProcessed = false; + if (preg_match('#^\-((?P\s+)(?P.+?))?\s*$#u', $this->currentLine, $values)) { + if ($context && 'mapping' == $context) { + throw new ParseException('You cannot define a sequence item when in a mapping'); + } + $context = 'sequence'; + + if (isset($values['value']) && preg_match('#^&(?P[^ ]+) *(?P.*)#u', $values['value'], $matches)) { + $isRef = $matches['ref']; + $values['value'] = $matches['value']; + } + + // array + if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) { + $c = $this->getRealCurrentLineNb() + 1; + $parser = new Parser($c); + $parser->refs =& $this->refs; + $data[] = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport); + } else { + if (isset($values['leadspaces']) + && ' ' == $values['leadspaces'] + && preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $values['value'], $matches) + ) { + // this is a compact notation element, add to next block and parse + $c = $this->getRealCurrentLineNb(); + $parser = new Parser($c); + $parser->refs =& $this->refs; + + $block = $values['value']; + if ($this->isNextLineIndented()) { + $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2); + } + + $data[] = $parser->parse($block, $exceptionOnInvalidType, $objectSupport); + } else { + $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport); + } + } + } elseif (preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P.+?))?\s*$#u', $this->currentLine, $values) && false === strpos($values['key'],' #')) { + if ($context && 'sequence' == $context) { + throw new ParseException('You cannot define a mapping item when in a sequence'); + } + $context = 'mapping'; + + // force correct settings + Inline::parse(null, $exceptionOnInvalidType, $objectSupport); + try { + $key = Inline::parseScalar($values['key']); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + if ('<<' === $key) { + if (isset($values['value']) && 0 === strpos($values['value'], '*')) { + $isInPlace = substr($values['value'], 1); + if (!array_key_exists($isInPlace, $this->refs)) { + throw new ParseException(sprintf('Reference "%s" does not exist.', $isInPlace), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } else { + if (isset($values['value']) && $values['value'] !== '') { + $value = $values['value']; + } else { + $value = $this->getNextEmbedBlock(); + } + $c = $this->getRealCurrentLineNb() + 1; + $parser = new Parser($c); + $parser->refs =& $this->refs; + $parsed = $parser->parse($value, $exceptionOnInvalidType, $objectSupport); + + $merged = array(); + if (!is_array($parsed)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } elseif (isset($parsed[0])) { + // Numeric array, merge individual elements + foreach (array_reverse($parsed) as $parsedItem) { + if (!is_array($parsedItem)) { + throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem); + } + $merged = array_merge($parsedItem, $merged); + } + } else { + // Associative array, merge + $merged = array_merge($merged, $parsed); + } + + $isProcessed = $merged; + } + } elseif (isset($values['value']) && preg_match('#^&(?P[^ ]+) *(?P.*)#u', $values['value'], $matches)) { + $isRef = $matches['ref']; + $values['value'] = $matches['value']; + } + + if ($isProcessed) { + // Merge keys + $data = $isProcessed; + // hash + } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) { + // if next line is less indented or equal, then it means that the current value is null + if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) { + $data[$key] = null; + } else { + $c = $this->getRealCurrentLineNb() + 1; + $parser = new Parser($c); + $parser->refs =& $this->refs; + $data[$key] = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport); + } + } else { + if ($isInPlace) { + $data = $this->refs[$isInPlace]; + } else { + $data[$key] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport); + } + } + } else { + // 1-liner optionally followed by newline + $lineCount = count($this->lines); + if (1 === $lineCount || (2 === $lineCount && empty($this->lines[1]))) { + try { + $value = Inline::parse($this->lines[0], $exceptionOnInvalidType, $objectSupport); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + if (is_array($value)) { + $first = reset($value); + if (is_string($first) && 0 === strpos($first, '*')) { + $data = array(); + foreach ($value as $alias) { + $data[] = $this->refs[substr($alias, 1)]; + } + $value = $data; + } + } + + if (isset($mbEncoding)) { + mb_internal_encoding($mbEncoding); + } + + return $value; + } + + switch (preg_last_error()) { + case PREG_INTERNAL_ERROR: + $error = 'Internal PCRE error.'; + break; + case PREG_BACKTRACK_LIMIT_ERROR: + $error = 'pcre.backtrack_limit reached.'; + break; + case PREG_RECURSION_LIMIT_ERROR: + $error = 'pcre.recursion_limit reached.'; + break; + case PREG_BAD_UTF8_ERROR: + $error = 'Malformed UTF-8 data.'; + break; + case PREG_BAD_UTF8_OFFSET_ERROR: + $error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point.'; + break; + default: + $error = 'Unable to parse.'; + } + + throw new ParseException($error, $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + if ($isRef) { + $this->refs[$isRef] = end($data); + } + } + + if (isset($mbEncoding)) { + mb_internal_encoding($mbEncoding); + } + + return empty($data) ? null : $data; + } + + /** + * Returns the current line number (takes the offset into account). + * + * @return integer The current line number + */ + private function getRealCurrentLineNb() + { + return $this->currentLineNb + $this->offset; + } + + /** + * Returns the current line indentation. + * + * @return integer The current line indentation + */ + private function getCurrentLineIndentation() + { + return strlen($this->currentLine) - strlen(ltrim($this->currentLine, ' ')); + } + + /** + * Returns the next embed block of YAML. + * + * @param integer $indentation The indent level at which the block is to be read, or null for default + * + * @return string A YAML string + * + * @throws ParseException When indentation problem are detected + */ + private function getNextEmbedBlock($indentation = null) + { + $this->moveToNextLine(); + + if (null === $indentation) { + $newIndent = $this->getCurrentLineIndentation(); + + $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem($this->currentLine); + + if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } else { + $newIndent = $indentation; + } + + $data = array(substr($this->currentLine, $newIndent)); + + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem($this->currentLine); + + // Comments must not be removed inside a string block (ie. after a line ending with "|") + $removeCommentsPattern = '~'.self::FOLDED_SCALAR_PATTERN.'$~'; + $removeComments = !preg_match($removeCommentsPattern, $this->currentLine); + + while ($this->moveToNextLine()) { + if ($this->getCurrentLineIndentation() === $newIndent) { + $removeComments = !preg_match($removeCommentsPattern, $this->currentLine); + } + + if ($isItUnindentedCollection && !$this->isStringUnIndentedCollectionItem($this->currentLine)) { + $this->moveToPreviousLine(); + break; + } + + if ($removeComments && $this->isCurrentLineEmpty() || $this->isCurrentLineBlank()) { + if ($this->isCurrentLineBlank()) { + $data[] = substr($this->currentLine, $newIndent); + } + + continue; + } + + $indent = $this->getCurrentLineIndentation(); + + if (preg_match('#^(?P *)$#', $this->currentLine, $match)) { + // empty line + $data[] = $match['text']; + } elseif ($indent >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent); + } elseif (0 == $indent) { + $this->moveToPreviousLine(); + + break; + } else { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } + + return implode("\n", $data); + } + + /** + * Moves the parser to the next line. + * + * @return Boolean + */ + private function moveToNextLine() + { + if ($this->currentLineNb >= count($this->lines) - 1) { + return false; + } + + $this->currentLine = $this->lines[++$this->currentLineNb]; + + return true; + } + + /** + * Moves the parser to the previous line. + */ + private function moveToPreviousLine() + { + $this->currentLine = $this->lines[--$this->currentLineNb]; + } + + /** + * Parses a YAML value. + * + * @param string $value A YAML value + * @param Boolean $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise + * @param Boolean $objectSupport True if object support is enabled, false otherwise + * + * @return mixed A PHP value + * + * @throws ParseException When reference does not exist + */ + private function parseValue($value, $exceptionOnInvalidType, $objectSupport) + { + if (0 === strpos($value, '*')) { + if (false !== $pos = strpos($value, '#')) { + $value = substr($value, 1, $pos - 2); + } else { + $value = substr($value, 1); + } + + if (!array_key_exists($value, $this->refs)) { + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLine); + } + + return $this->refs[$value]; + } + + if (preg_match('/^'.self::FOLDED_SCALAR_PATTERN.'$/', $value, $matches)) { + $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : ''; + + return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers))); + } + + try { + return Inline::parse($value, $exceptionOnInvalidType, $objectSupport); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } + + /** + * Parses a folded scalar. + * + * @param string $separator The separator that was used to begin this folded scalar (| or >) + * @param string $indicator The indicator that was used to begin this folded scalar (+ or -) + * @param integer $indentation The indentation that was used to begin this folded scalar + * + * @return string The text value + */ + private function parseFoldedScalar($separator, $indicator = '', $indentation = 0) + { + $notEOF = $this->moveToNextLine(); + if (!$notEOF) { + return ''; + } + + $isCurrentLineBlank = $this->isCurrentLineBlank(); + $text = ''; + + // leading blank lines are consumed before determining indentation + while ($notEOF && $isCurrentLineBlank) { + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $text .= "\n"; + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + + // determine indentation if not specified + if (0 === $indentation) { + if (preg_match('/^ +/', $this->currentLine, $matches)) { + $indentation = strlen($matches[0]); + } + } + + if ($indentation > 0) { + $pattern = sprintf('/^ {%d}(.*)$/', $indentation); + + while ( + $notEOF && ( + $isCurrentLineBlank || + preg_match($pattern, $this->currentLine, $matches) + ) + ) { + if ($isCurrentLineBlank) { + $text .= substr($this->currentLine, $indentation); + } else { + $text .= $matches[1]; + } + + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $text .= "\n"; + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + } elseif ($notEOF) { + $text .= "\n"; + } + + if ($notEOF) { + $this->moveToPreviousLine(); + } + + // replace all non-trailing single newlines with spaces in folded blocks + if ('>' === $separator) { + preg_match('/(\n*)$/', $text, $matches); + $text = preg_replace('/(?getCurrentLineIndentation(); + $EOF = !$this->moveToNextLine(); + + while (!$EOF && $this->isCurrentLineEmpty()) { + $EOF = !$this->moveToNextLine(); + } + + if ($EOF) { + return false; + } + + $ret = false; + if ($this->getCurrentLineIndentation() > $currentIndentation) { + $ret = true; + } + + $this->moveToPreviousLine(); + + return $ret; + } + + /** + * Returns true if the current line is blank or if it is a comment line. + * + * @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise + */ + private function isCurrentLineEmpty() + { + return $this->isCurrentLineBlank() || $this->isCurrentLineComment(); + } + + /** + * Returns true if the current line is blank. + * + * @return Boolean Returns true if the current line is blank, false otherwise + */ + private function isCurrentLineBlank() + { + return '' == trim($this->currentLine, ' '); + } + + /** + * Returns true if the current line is a comment line. + * + * @return Boolean Returns true if the current line is a comment line, false otherwise + */ + private function isCurrentLineComment() + { + //checking explicitly the first char of the trim is faster than loops or strpos + $ltrimmedLine = ltrim($this->currentLine, ' '); + + return $ltrimmedLine[0] === '#'; + } + + /** + * Cleanups a YAML string to be parsed. + * + * @param string $value The input YAML string + * + * @return string A cleaned up YAML string + */ + private function cleanup($value) + { + $value = str_replace(array("\r\n", "\r"), "\n", $value); + + // strip YAML header + $count = 0; + $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#su', '', $value, -1, $count); + $this->offset += $count; + + // remove leading comments + $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); + if ($count == 1) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + } + + // remove start of the document marker (---) + $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); + if ($count == 1) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + + // remove end of the document marker (...) + $value = preg_replace('#\.\.\.\s*$#s', '', $value); + } + + return $value; + } + + /** + * Returns true if the next line starts unindented collection + * + * @return Boolean Returns true if the next line starts unindented collection, false otherwise + */ + private function isNextLineUnIndentedCollection() + { + $currentIndentation = $this->getCurrentLineIndentation(); + $notEOF = $this->moveToNextLine(); + + while ($notEOF && $this->isCurrentLineEmpty()) { + $notEOF = $this->moveToNextLine(); + } + + if (false === $notEOF) { + return false; + } + + $ret = false; + if ( + $this->getCurrentLineIndentation() == $currentIndentation + && + $this->isStringUnIndentedCollectionItem($this->currentLine) + ) { + $ret = true; + } + + $this->moveToPreviousLine(); + + return $ret; + } + + /** + * Returns true if the string is un-indented collection item + * + * @return Boolean Returns true if the string is un-indented collection item, false otherwise + */ + private function isStringUnIndentedCollectionItem() + { + return (0 === strpos($this->currentLine, '- ')); + } + +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +/** + * Unescaper encapsulates unescaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + */ +class Unescaper +{ + // Parser and Inline assume UTF-8 encoding, so escaped Unicode characters + // must be converted to that encoding. + const ENCODING = 'UTF-8'; + + // Regex fragment that matches an escaped character in a double quoted + // string. + const REGEX_ESCAPED_CHARACTER = "\\\\([0abt\tnvfre \\\"\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})"; + + /** + * Unescapes a single quoted string. + * + * @param string $value A single quoted string. + * + * @return string The unescaped string. + */ + public function unescapeSingleQuotedString($value) + { + return str_replace('\'\'', '\'', $value); + } + + /** + * Unescapes a double quoted string. + * + * @param string $value A double quoted string. + * + * @return string The unescaped string. + */ + public function unescapeDoubleQuotedString($value) + { + $self = $this; + $callback = function($match) use ($self) { + return $self->unescapeCharacter($match[0]); + }; + + // evaluate the string + return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value); + } + + /** + * Unescapes a character that was found in a double-quoted string + * + * @param string $value An escaped character + * + * @return string The unescaped character + */ + public function unescapeCharacter($value) + { + switch ($value{1}) { + case '0': + return "\x0"; + case 'a': + return "\x7"; + case 'b': + return "\x8"; + case 't': + return "\t"; + case "\t": + return "\t"; + case 'n': + return "\n"; + case 'v': + return "\xb"; + case 'f': + return "\xc"; + case 'r': + return "\xd"; + case 'e': + return "\x1b"; + case ' ': + return ' '; + case '"': + return '"'; + case '/': + return '/'; + case '\\': + return '\\'; + case 'N': + // U+0085 NEXT LINE + return $this->convertEncoding("\x00\x85", self::ENCODING, 'UCS-2BE'); + case '_': + // U+00A0 NO-BREAK SPACE + return $this->convertEncoding("\x00\xA0", self::ENCODING, 'UCS-2BE'); + case 'L': + // U+2028 LINE SEPARATOR + return $this->convertEncoding("\x20\x28", self::ENCODING, 'UCS-2BE'); + case 'P': + // U+2029 PARAGRAPH SEPARATOR + return $this->convertEncoding("\x20\x29", self::ENCODING, 'UCS-2BE'); + case 'x': + $char = pack('n', hexdec(substr($value, 2, 2))); + + return $this->convertEncoding($char, self::ENCODING, 'UCS-2BE'); + case 'u': + $char = pack('n', hexdec(substr($value, 2, 4))); + + return $this->convertEncoding($char, self::ENCODING, 'UCS-2BE'); + case 'U': + $char = pack('N', hexdec(substr($value, 2, 8))); + + return $this->convertEncoding($char, self::ENCODING, 'UCS-4BE'); + } + } + + /** + * Convert a string from one encoding to another. + * + * @param string $value The string to convert + * @param string $to The input encoding + * @param string $from The output encoding + * + * @return string The string with the new encoding + * + * @throws \RuntimeException if no suitable encoding function is found (iconv or mbstring) + */ + private function convertEncoding($value, $to, $from) + { + if (function_exists('mb_convert_encoding')) { + return mb_convert_encoding($value, $to, $from); + } elseif (function_exists('iconv')) { + return iconv($from, $to, $value); + } + + throw new \RuntimeException('No suitable convert encoding function (install the iconv or mbstring extension).'); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Exception\DumpException; + +/** + * Inline implements a YAML parser/dumper for the YAML inline syntax. + * + * @author Fabien Potencier + */ +class Inline +{ + const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\']*(?:\'\'[^\']*)*)\')'; + + private static $exceptionOnInvalidType = false; + private static $objectSupport = false; + + /** + * Converts a YAML string to a PHP array. + * + * @param string $value A YAML string + * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise + * @param Boolean $objectSupport true if object support is enabled, false otherwise + * + * @return array A PHP array representing the YAML string + * + * @throws ParseException + */ + public static function parse($value, $exceptionOnInvalidType = false, $objectSupport = false) + { + self::$exceptionOnInvalidType = $exceptionOnInvalidType; + self::$objectSupport = $objectSupport; + + $value = trim($value); + + if (0 == strlen($value)) { + return ''; + } + + if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { + $mbEncoding = mb_internal_encoding(); + mb_internal_encoding('ASCII'); + } + + $i = 0; + switch ($value[0]) { + case '[': + $result = self::parseSequence($value, $i); + ++$i; + break; + case '{': + $result = self::parseMapping($value, $i); + ++$i; + break; + default: + $result = self::parseScalar($value, null, array('"', "'"), $i); + } + + // some comments are allowed at the end + if (preg_replace('/\s+#.*$/A', '', substr($value, $i))) { + throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i))); + } + + if (isset($mbEncoding)) { + mb_internal_encoding($mbEncoding); + } + + return $result; + } + + /** + * Dumps a given PHP variable to a YAML string. + * + * @param mixed $value The PHP variable to convert + * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise + * @param Boolean $objectSupport true if object support is enabled, false otherwise + * + * @return string The YAML string representing the PHP array + * + * @throws DumpException When trying to dump PHP resource + */ + public static function dump($value, $exceptionOnInvalidType = false, $objectSupport = false) + { + switch (true) { + case is_resource($value): + if ($exceptionOnInvalidType) { + throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); + } + + return 'null'; + case is_object($value): + if ($objectSupport) { + return '!!php/object:'.serialize($value); + } + + if ($exceptionOnInvalidType) { + throw new DumpException('Object support when dumping a YAML file has been disabled.'); + } + + return 'null'; + case is_array($value): + return self::dumpArray($value, $exceptionOnInvalidType, $objectSupport); + case null === $value: + return 'null'; + case true === $value: + return 'true'; + case false === $value: + return 'false'; + case ctype_digit($value): + return is_string($value) ? "'$value'" : (int) $value; + case is_numeric($value): + $locale = setlocale(LC_NUMERIC, 0); + if (false !== $locale) { + setlocale(LC_NUMERIC, 'C'); + } + $repr = is_string($value) ? "'$value'" : (is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : strval($value)); + + if (false !== $locale) { + setlocale(LC_NUMERIC, $locale); + } + + return $repr; + case Escaper::requiresDoubleQuoting($value): + return Escaper::escapeWithDoubleQuotes($value); + case Escaper::requiresSingleQuoting($value): + return Escaper::escapeWithSingleQuotes($value); + case '' == $value: + return "''"; + case preg_match(self::getTimestampRegex(), $value): + case in_array(strtolower($value), array('null', '~', 'true', 'false')): + return "'$value'"; + default: + return $value; + } + } + + /** + * Dumps a PHP array to a YAML string. + * + * @param array $value The PHP array to dump + * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise + * @param Boolean $objectSupport true if object support is enabled, false otherwise + * + * @return string The YAML string representing the PHP array + */ + private static function dumpArray($value, $exceptionOnInvalidType, $objectSupport) + { + // array + $keys = array_keys($value); + if ((1 == count($keys) && '0' == $keys[0]) + || (count($keys) > 1 && array_reduce($keys, function ($v, $w) { return (integer) $v + $w; }, 0) == count($keys) * (count($keys) - 1) / 2) + ) { + $output = array(); + foreach ($value as $val) { + $output[] = self::dump($val, $exceptionOnInvalidType, $objectSupport); + } + + return sprintf('[%s]', implode(', ', $output)); + } + + // mapping + $output = array(); + foreach ($value as $key => $val) { + $output[] = sprintf('%s: %s', self::dump($key, $exceptionOnInvalidType, $objectSupport), self::dump($val, $exceptionOnInvalidType, $objectSupport)); + } + + return sprintf('{ %s }', implode(', ', $output)); + } + + /** + * Parses a scalar to a YAML string. + * + * @param scalar $scalar + * @param string $delimiters + * @param array $stringDelimiters + * @param integer &$i + * @param Boolean $evaluate + * + * @return string A YAML string + * + * @throws ParseException When malformed inline YAML string is parsed + */ + public static function parseScalar($scalar, $delimiters = null, $stringDelimiters = array('"', "'"), &$i = 0, $evaluate = true) + { + if (in_array($scalar[$i], $stringDelimiters)) { + // quoted scalar + $output = self::parseQuotedScalar($scalar, $i); + + if (null !== $delimiters) { + $tmp = ltrim(substr($scalar, $i), ' '); + if (!in_array($tmp[0], $delimiters)) { + throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i))); + } + } + } else { + // "normal" string + if (!$delimiters) { + $output = substr($scalar, $i); + $i += strlen($output); + + // remove comments + if (false !== $strpos = strpos($output, ' #')) { + $output = rtrim(substr($output, 0, $strpos)); + } + } elseif (preg_match('/^(.+?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) { + $output = $match[1]; + $i += strlen($output); + } else { + throw new ParseException(sprintf('Malformed inline YAML string (%s).', $scalar)); + } + + $output = $evaluate ? self::evaluateScalar($output) : $output; + } + + return $output; + } + + /** + * Parses a quoted scalar to YAML. + * + * @param string $scalar + * @param integer &$i + * + * @return string A YAML string + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseQuotedScalar($scalar, &$i) + { + if (!preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) { + throw new ParseException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i))); + } + + $output = substr($match[0], 1, strlen($match[0]) - 2); + + $unescaper = new Unescaper(); + if ('"' == $scalar[$i]) { + $output = $unescaper->unescapeDoubleQuotedString($output); + } else { + $output = $unescaper->unescapeSingleQuotedString($output); + } + + $i += strlen($match[0]); + + return $output; + } + + /** + * Parses a sequence to a YAML string. + * + * @param string $sequence + * @param integer &$i + * + * @return string A YAML string + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseSequence($sequence, &$i = 0) + { + $output = array(); + $len = strlen($sequence); + $i += 1; + + // [foo, bar, ...] + while ($i < $len) { + switch ($sequence[$i]) { + case '[': + // nested sequence + $output[] = self::parseSequence($sequence, $i); + break; + case '{': + // nested mapping + $output[] = self::parseMapping($sequence, $i); + break; + case ']': + return $output; + case ',': + case ' ': + break; + default: + $isQuoted = in_array($sequence[$i], array('"', "'")); + $value = self::parseScalar($sequence, array(',', ']'), array('"', "'"), $i); + + if (!$isQuoted && false !== strpos($value, ': ')) { + // embedded mapping? + try { + $value = self::parseMapping('{'.$value.'}'); + } catch (\InvalidArgumentException $e) { + // no, it's not + } + } + + $output[] = $value; + + --$i; + } + + ++$i; + } + + throw new ParseException(sprintf('Malformed inline YAML string %s', $sequence)); + } + + /** + * Parses a mapping to a YAML string. + * + * @param string $mapping + * @param integer &$i + * + * @return string A YAML string + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseMapping($mapping, &$i = 0) + { + $output = array(); + $len = strlen($mapping); + $i += 1; + + // {foo: bar, bar:foo, ...} + while ($i < $len) { + switch ($mapping[$i]) { + case ' ': + case ',': + ++$i; + continue 2; + case '}': + return $output; + } + + // key + $key = self::parseScalar($mapping, array(':', ' '), array('"', "'"), $i, false); + + // value + $done = false; + while ($i < $len) { + switch ($mapping[$i]) { + case '[': + // nested sequence + $output[$key] = self::parseSequence($mapping, $i); + $done = true; + break; + case '{': + // nested mapping + $output[$key] = self::parseMapping($mapping, $i); + $done = true; + break; + case ':': + case ' ': + break; + default: + $output[$key] = self::parseScalar($mapping, array(',', '}'), array('"', "'"), $i); + $done = true; + --$i; + } + + ++$i; + + if ($done) { + continue 2; + } + } + } + + throw new ParseException(sprintf('Malformed inline YAML string %s', $mapping)); + } + + /** + * Evaluates scalars and replaces magic values. + * + * @param string $scalar + * + * @return string A YAML string + */ + private static function evaluateScalar($scalar) + { + $scalar = trim($scalar); + + switch (true) { + case 'null' == strtolower($scalar): + case '' == $scalar: + case '~' == $scalar: + return null; + case 0 === strpos($scalar, '!str'): + return (string) substr($scalar, 5); + case 0 === strpos($scalar, '! '): + return intval(self::parseScalar(substr($scalar, 2))); + case 0 === strpos($scalar, '!!php/object:'): + if (self::$objectSupport) { + return unserialize(substr($scalar, 13)); + } + + if (self::$exceptionOnInvalidType) { + throw new ParseException('Object support when parsing a YAML file has been disabled.'); + } + + return null; + case ctype_digit($scalar): + $raw = $scalar; + $cast = intval($scalar); + + return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw); + case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): + $raw = $scalar; + $cast = intval($scalar); + + return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw); + case 'true' === strtolower($scalar): + return true; + case 'false' === strtolower($scalar): + return false; + case is_numeric($scalar): + return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar); + case 0 == strcasecmp($scalar, '.inf'): + case 0 == strcasecmp($scalar, '.NaN'): + return -log(0); + case 0 == strcasecmp($scalar, '-.inf'): + return log(0); + case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar): + return floatval(str_replace(',', '', $scalar)); + case preg_match(self::getTimestampRegex(), $scalar): + return strtotime($scalar); + default: + return (string) $scalar; + } + } + + /** + * Gets a regex that matches a YAML date. + * + * @return string The regular expression + * + * @see http://www.yaml.org/spec/1.2/spec.html#id2761573 + */ + private static function getTimestampRegex() + { + return <<[0-9][0-9][0-9][0-9]) + -(?P[0-9][0-9]?) + -(?P[0-9][0-9]?) + (?:(?:[Tt]|[ \t]+) + (?P[0-9][0-9]?) + :(?P[0-9][0-9]) + :(?P[0-9][0-9]) + (?:\.(?P[0-9]*))? + (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) + (?::(?P[0-9][0-9]))?))?)? + $~x +EOF; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +/** + * Escaper encapsulates escaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + */ +class Escaper +{ + // Characters that would cause a dumped string to require double quoting. + const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; + + // Mapping arrays for escaping a double quoted string. The backslash is + // first to ensure proper escaping because str_replace operates iteratively + // on the input arrays. This ordering of the characters avoids the use of strtr, + // which performs more slowly. + private static $escapees = array('\\\\', '\\"', '"', + "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", + "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", + "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", + "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", + "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9"); + private static $escaped = array('\\"', '\\\\', '\\"', + "\\0", "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\a", + "\\b", "\\t", "\\n", "\\v", "\\f", "\\r", "\\x0e", "\\x0f", + "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17", + "\\x18", "\\x19", "\\x1a", "\\e", "\\x1c", "\\x1d", "\\x1e", "\\x1f", + "\\N", "\\_", "\\L", "\\P"); + + /** + * Determines if a PHP value would require double quoting in YAML. + * + * @param string $value A PHP value + * + * @return Boolean True if the value would require double quotes. + */ + public static function requiresDoubleQuoting($value) + { + return preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); + } + + /** + * Escapes and surrounds a PHP value with double quotes. + * + * @param string $value A PHP value + * + * @return string The quoted, escaped string + */ + public static function escapeWithDoubleQuotes($value) + { + return sprintf('"%s"', str_replace(self::$escapees, self::$escaped, $value)); + } + + /** + * Determines if a PHP value would require single quoting in YAML. + * + * @param string $value A PHP value + * + * @return Boolean True if the value would require single quotes. + */ + public static function requiresSingleQuoting($value) + { + return preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ - ? | < > = ! % @ ` ]/x', $value); + } + + /** + * Escapes and surrounds a PHP value with single quotes. + * + * @param string $value A PHP value + * + * @return string The quoted, escaped string + */ + public static function escapeWithSingleQuotes($value) + { + return sprintf("'%s'", str_replace('\'', '\'\'', $value)); + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.0.0 + */ + +// @codeCoverageIgnoreStart +// @codingStandardsIgnoreStart +/** + * @SuppressWarnings(PHPMD) + */ +if (!function_exists('trait_exists')) { + function trait_exists($name) + { + return FALSE; + } +} +// @codingStandardsIgnoreEnd +// @codeCoverageIgnoreEnd + +/** + * Provides collection functionality for PHP code coverage information. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.0.0 + */ +class PHP_CodeCoverage +{ + /** + * @var PHP_CodeCoverage_Driver + */ + protected $driver; + + /** + * @var PHP_CodeCoverage_Filter + */ + protected $filter; + + /** + * @var boolean + */ + protected $cacheTokens = FALSE; + + /** + * @var boolean + */ + protected $forceCoversAnnotation = FALSE; + + /** + * @var boolean + */ + protected $mapTestClassNameToCoveredClassName = FALSE; + + /** + * @var boolean + */ + protected $addUncoveredFilesFromWhitelist = TRUE; + + /** + * @var boolean + */ + protected $processUncoveredFilesFromWhitelist = FALSE; + + /** + * @var mixed + */ + protected $currentId; + + /** + * Code coverage data. + * + * @var array + */ + protected $data = array(); + + /** + * Test data. + * + * @var array + */ + protected $tests = array(); + + /** + * Constructor. + * + * @param PHP_CodeCoverage_Driver $driver + * @param PHP_CodeCoverage_Filter $filter + */ + public function __construct(PHP_CodeCoverage_Driver $driver = NULL, PHP_CodeCoverage_Filter $filter = NULL) + { + if ($driver === NULL) { + $driver = new PHP_CodeCoverage_Driver_Xdebug; + } + + if ($filter === NULL) { + $filter = new PHP_CodeCoverage_Filter; + } + + $this->driver = $driver; + $this->filter = $filter; + } + + /** + * Returns the PHP_CodeCoverage_Report_Node_* object graph + * for this PHP_CodeCoverage object. + * + * @return PHP_CodeCoverage_Report_Node_Directory + * @since Method available since Release 1.1.0 + */ + public function getReport() + { + $factory = new PHP_CodeCoverage_Report_Factory; + + return $factory->create($this); + } + + /** + * Clears collected code coverage data. + */ + public function clear() + { + $this->currentId = NULL; + $this->data = array(); + $this->tests = array(); + } + + /** + * Returns the PHP_CodeCoverage_Filter used. + * + * @return PHP_CodeCoverage_Filter + */ + public function filter() + { + return $this->filter; + } + + /** + * Returns the collected code coverage data. + * + * @return array + * @since Method available since Release 1.1.0 + */ + public function getData() + { + if ($this->addUncoveredFilesFromWhitelist) { + $this->addUncoveredFilesFromWhitelist(); + } + + // We need to apply the blacklist filter a second time + // when no whitelist is used. + if (!$this->filter->hasWhitelist()) { + $this->applyListsFilter($this->data); + } + + return $this->data; + } + + /** + * Returns the test data. + * + * @return array + * @since Method available since Release 1.1.0 + */ + public function getTests() + { + return $this->tests; + } + + /** + * Start collection of code coverage information. + * + * @param mixed $id + * @param boolean $clear + * @throws PHP_CodeCoverage_Exception + */ + public function start($id, $clear = FALSE) + { + if (!is_bool($clear)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'boolean' + ); + } + + if ($clear) { + $this->clear(); + } + + $this->currentId = $id; + + $this->driver->start(); + } + + /** + * Stop collection of code coverage information. + * + * @param boolean $append + * @return array + * @throws PHP_CodeCoverage_Exception + */ + public function stop($append = TRUE) + { + if (!is_bool($append)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'boolean' + ); + } + + $data = $this->driver->stop(); + $this->append($data, NULL, $append); + + $this->currentId = NULL; + + return $data; + } + + /** + * Appends code coverage data. + * + * @param array $data + * @param mixed $id + * @param boolean $append + */ + public function append(array $data, $id = NULL, $append = TRUE) + { + if ($id === NULL) { + $id = $this->currentId; + } + + if ($id === NULL) { + throw new PHP_CodeCoverage_Exception; + } + + $this->applyListsFilter($data); + $this->initializeFilesThatAreSeenTheFirstTime($data); + + if (!$append) { + return; + } + + if ($id != 'UNCOVERED_FILES_FROM_WHITELIST') { + $this->applyCoversAnnotationFilter($data, $id); + } + + if (empty($data)) { + return; + } + + $status = NULL; + + if ($id instanceof PHPUnit_Framework_TestCase) { + $status = $id->getStatus(); + $id = get_class($id) . '::' . $id->getName(); + } + + else if ($id instanceof PHPUnit_Extensions_PhptTestCase) { + $id = $id->getName(); + } + + $this->tests[$id] = $status; + + foreach ($data as $file => $lines) { + if (!$this->filter->isFile($file)) { + continue; + } + + foreach ($lines as $k => $v) { + if ($v == 1) { + $this->data[$file][$k][] = $id; + } + } + } + } + + /** + * Merges the data from another instance of PHP_CodeCoverage. + * + * @param PHP_CodeCoverage $that + */ + public function merge(PHP_CodeCoverage $that) + { + foreach ($that->data as $file => $lines) { + if (!isset($this->data[$file])) { + if (!$this->filter->isFiltered($file)) { + $this->data[$file] = $lines; + } + + continue; + } + + foreach ($lines as $line => $data) { + if ($data !== NULL) { + if (!isset($this->data[$file][$line])) { + $this->data[$file][$line] = $data; + } else { + $this->data[$file][$line] = array_unique( + array_merge($this->data[$file][$line], $data) + ); + } + } + } + } + + $this->tests = array_merge($this->tests, $that->getTests()); + } + + /** + * @param boolean $flag + * @throws PHP_CodeCoverage_Exception + * @since Method available since Release 1.1.0 + */ + public function setCacheTokens($flag) + { + if (!is_bool($flag)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'boolean' + ); + } + + $this->cacheTokens = $flag; + } + + /** + * @param boolean $flag + * @since Method available since Release 1.1.0 + */ + public function getCacheTokens() + { + return $this->cacheTokens; + } + + /** + * @param boolean $flag + * @throws PHP_CodeCoverage_Exception + */ + public function setForceCoversAnnotation($flag) + { + if (!is_bool($flag)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'boolean' + ); + } + + $this->forceCoversAnnotation = $flag; + } + + /** + * @param boolean $flag + * @throws PHP_CodeCoverage_Exception + */ + public function setMapTestClassNameToCoveredClassName($flag) + { + if (!is_bool($flag)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'boolean' + ); + } + + $this->mapTestClassNameToCoveredClassName = $flag; + } + + /** + * @param boolean $flag + * @throws PHP_CodeCoverage_Exception + */ + public function setAddUncoveredFilesFromWhitelist($flag) + { + if (!is_bool($flag)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'boolean' + ); + } + + $this->addUncoveredFilesFromWhitelist = $flag; + } + + /** + * @param boolean $flag + * @throws PHP_CodeCoverage_Exception + */ + public function setProcessUncoveredFilesFromWhitelist($flag) + { + if (!is_bool($flag)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'boolean' + ); + } + + $this->processUncoveredFilesFromWhitelist = $flag; + } + + /** + * Applies the @covers annotation filtering. + * + * @param array $data + * @param mixed $id + */ + protected function applyCoversAnnotationFilter(&$data, $id) + { + if ($id instanceof PHPUnit_Framework_TestCase) { + $testClassName = get_class($id); + $linesToBeCovered = $this->getLinesToBeCovered( + $testClassName, $id->getName() + ); + + if ($linesToBeCovered === FALSE) { + $data = array(); + return; + } + + if ($this->mapTestClassNameToCoveredClassName && + empty($linesToBeCovered)) { + $testedClass = substr($testClassName, 0, -4); + + if (class_exists($testedClass)) { + $class = new ReflectionClass($testedClass); + + $linesToBeCovered = array( + $class->getFileName() => range( + $class->getStartLine(), $class->getEndLine() + ) + ); + } + } + } else { + $linesToBeCovered = array(); + } + + if (!empty($linesToBeCovered)) { + $data = array_intersect_key($data, $linesToBeCovered); + + foreach (array_keys($data) as $filename) { + $data[$filename] = array_intersect_key( + $data[$filename], array_flip($linesToBeCovered[$filename]) + ); + } + } + + else if ($this->forceCoversAnnotation) { + $data = array(); + } + } + + /** + * Applies the blacklist/whitelist filtering. + * + * @param array $data + */ + protected function applyListsFilter(&$data) + { + foreach (array_keys($data) as $filename) { + if ($this->filter->isFiltered($filename)) { + unset($data[$filename]); + } + } + } + + /** + * @since Method available since Release 1.1.0 + */ + protected function initializeFilesThatAreSeenTheFirstTime($data) + { + foreach ($data as $file => $lines) { + if ($this->filter->isFile($file) && !isset($this->data[$file])) { + $this->data[$file] = array(); + + foreach ($lines as $k => $v) { + $this->data[$file][$k] = $v == -2 ? NULL : array(); + } + } + } + } + + /** + * Processes whitelisted files that are not covered. + */ + protected function addUncoveredFilesFromWhitelist() + { + $data = array(); + $uncoveredFiles = array_diff( + $this->filter->getWhitelist(), array_keys($this->data) + ); + + foreach ($uncoveredFiles as $uncoveredFile) { + if (!file_exists($uncoveredFile)) { + continue; + } + + if ($this->processUncoveredFilesFromWhitelist) { + $this->processUncoveredFileFromWhitelist( + $uncoveredFile, $data, $uncoveredFiles + ); + } else { + $data[$uncoveredFile] = array(); + + $lines = count(file($uncoveredFile)); + + for ($i = 1; $i <= $lines; $i++) { + $data[$uncoveredFile][$i] = -1; + } + } + } + + $this->append($data, 'UNCOVERED_FILES_FROM_WHITELIST'); + } + + /** + * @param string $uncoveredFile + * @param array $data + * @param array $uncoveredFiles + */ + protected function processUncoveredFileFromWhitelist($uncoveredFile, array &$data, array $uncoveredFiles) + { + $this->driver->start(); + include_once $uncoveredFile; + $coverage = $this->driver->stop(); + + foreach ($coverage as $file => $fileCoverage) { + if (!isset($data[$file]) && + in_array($file, $uncoveredFiles)) { + foreach (array_keys($fileCoverage) as $key) { + if ($fileCoverage[$key] == 1) { + $fileCoverage[$key] = -1; + } + } + + $data[$file] = $fileCoverage; + } + } + } + + /** + * Returns the files and lines a test method wants to cover. + * + * @param string $className + * @param string $methodName + * @return array + * @since Method available since Release 1.2.0 + */ + protected function getLinesToBeCovered($className, $methodName) + { + $codeToCoverList = array(); + $result = array(); + + // @codeCoverageIgnoreStart + if (($pos = strpos($methodName, ' ')) !== FALSE) { + $methodName = substr($methodName, 0, $pos); + } + // @codeCoverageIgnoreEnd + + $class = new ReflectionClass($className); + + try { + $method = new ReflectionMethod($className, $methodName); + } + + catch (ReflectionException $e) { + return array(); + } + + $docComment = substr($class->getDocComment(), 3, -2) . PHP_EOL . substr($method->getDocComment(), 3, -2); + + $templateMethods = array( + 'setUp', 'assertPreConditions', 'assertPostConditions', 'tearDown' + ); + + foreach ($templateMethods as $templateMethod) { + if ($class->hasMethod($templateMethod)) { + $reflector = $class->getMethod($templateMethod); + $docComment .= PHP_EOL . substr($reflector->getDocComment(), 3, -2); + unset($reflector); + } + } + + if (strpos($docComment, '@coversNothing') !== FALSE) { + return FALSE; + } + + $classShortcut = preg_match_all( + '(@coversDefaultClass\s+(?P[^\s]++)\s*$)m', + $class->getDocComment(), + $matches + ); + + if ($classShortcut) { + if ($classShortcut > 1) { + throw new PHP_CodeCoverage_Exception( + sprintf( + 'More than one @coversClass annotation in class or interface "%s".', + $className + ) + ); + } + + $classShortcut = $matches['coveredClass'][0]; + } + + $match = preg_match_all( + '(@covers\s+(?P[^\s()]++)[\s()]*$)m', + $docComment, + $matches + ); + + if ($match) { + foreach ($matches['coveredElement'] as $coveredElement) { + if ($classShortcut && strncmp($coveredElement, '::', 2) === 0) { + $coveredElement = $classShortcut . $coveredElement; + } + + $codeToCoverList = array_merge( + $codeToCoverList, + $this->resolveCoversToReflectionObjects($coveredElement) + ); + } + + foreach ($codeToCoverList as $codeToCover) { + $fileName = $codeToCover->getFileName(); + + if (!isset($result[$fileName])) { + $result[$fileName] = array(); + } + + $result[$fileName] = array_unique( + array_merge( + $result[$fileName], + range( + $codeToCover->getStartLine(), $codeToCover->getEndLine() + ) + ) + ); + } + } + + return $result; + } + + /** + * @param string $coveredElement + * @return array + * @since Method available since Release 1.2.0 + */ + protected function resolveCoversToReflectionObjects($coveredElement) + { + $codeToCoverList = array(); + + if (strpos($coveredElement, '::') !== FALSE) { + list($className, $methodName) = explode('::', $coveredElement); + + if (isset($methodName[0]) && $methodName[0] == '<') { + $classes = array($className); + + foreach ($classes as $className) { + if (!class_exists($className) && + !interface_exists($className)) { + throw new PHP_CodeCoverage_Exception( + sprintf( + 'Trying to @cover not existing class or ' . + 'interface "%s".', + $className + ) + ); + } + + $class = new ReflectionClass($className); + $methods = $class->getMethods(); + $inverse = isset($methodName[1]) && $methodName[1] == '!'; + + if (strpos($methodName, 'protected')) { + $visibility = 'isProtected'; + } + + else if (strpos($methodName, 'private')) { + $visibility = 'isPrivate'; + } + + else if (strpos($methodName, 'public')) { + $visibility = 'isPublic'; + } + + foreach ($methods as $method) { + if ($inverse && !$method->$visibility()) { + $codeToCoverList[] = $method; + } + + else if (!$inverse && $method->$visibility()) { + $codeToCoverList[] = $method; + } + } + } + } else { + $classes = array($className); + + foreach ($classes as $className) { + if ($className == '' && function_exists($methodName)) { + $codeToCoverList[] = new ReflectionFunction( + $methodName + ); + } else { + if (!((class_exists($className) || + interface_exists($className) || + trait_exists($className)) && + method_exists($className, $methodName))) { + throw new PHP_CodeCoverage_Exception( + sprintf( + 'Trying to @cover not existing method "%s::%s".', + $className, + $methodName + ) + ); + } + + $codeToCoverList[] = new ReflectionMethod( + $className, $methodName + ); + } + } + } + } else { + $extended = FALSE; + + if (strpos($coveredElement, '') !== FALSE) { + $coveredElement = str_replace( + '', '', $coveredElement + ); + + $extended = TRUE; + } + + $classes = array($coveredElement); + + if ($extended) { + $classes = array_merge( + $classes, + class_implements($coveredElement), + class_parents($coveredElement) + ); + } + + foreach ($classes as $className) { + if (!class_exists($className) && + !interface_exists($className) && + !trait_exists($className)) { + throw new PHP_CodeCoverage_Exception( + sprintf( + 'Trying to @cover not existing class or ' . + 'interface "%s".', + $className + ) + ); + } + + $codeToCoverList[] = new ReflectionClass($className); + } + } + + return $codeToCoverList; + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.2.0 + */ + +/** + * Factory for PHP_CodeCoverage_Exception objects that are used to describe + * invalid arguments passed to a function or method. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.2.0 + */ +class PHP_CodeCoverage_Util_InvalidArgumentHelper +{ + /** + * @param integer $argument + * @param string $type + * @param mixed $value + */ + public static function factory($argument, $type, $value = NULL) + { + $stack = debug_backtrace(FALSE); + + return new PHP_CodeCoverage_Exception( + sprintf( + 'Argument #%d%sof %s::%s() must be a %s', + $argument, + $value !== NULL ? ' (' . $value . ')' : ' ', + $stack[1]['class'], + $stack[1]['function'], + $type + ) + ); + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.0.0 + */ + +/** + * Driver for Xdebug's code coverage functionality. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.0.0 + * @codeCoverageIgnore + */ +class PHP_CodeCoverage_Driver_Xdebug implements PHP_CodeCoverage_Driver +{ + /** + * Constructor. + */ + public function __construct() + { + if (!extension_loaded('xdebug')) { + throw new PHP_CodeCoverage_Exception('Xdebug is not loaded.'); + } + + if (version_compare(phpversion('xdebug'), '2.2.0-dev', '>=') && + !ini_get('xdebug.coverage_enable')) { + throw new PHP_CodeCoverage_Exception( + 'You need to set xdebug.coverage_enable=On in your php.ini.' + ); + } + } + + /** + * Start collection of code coverage information. + */ + public function start() + { + xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); + } + + /** + * Stop collection of code coverage information. + * + * @return array + */ + public function stop() + { + $codeCoverage = xdebug_get_code_coverage(); + xdebug_stop_code_coverage(); + + return $codeCoverage; + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.0.0 + */ + +/** + * Utility methods. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.0.0 + */ +class PHP_CodeCoverage_Util +{ + /** + * @var array + */ + protected static $ignoredLines = array(); + + /** + * @var array + */ + protected static $ids = array(); + + + /** + * Returns the lines of a source file that should be ignored. + * + * @param string $filename + * @param boolean $cacheTokens + * @return array + * @throws PHP_CodeCoverage_Exception + */ + public static function getLinesToBeIgnored($filename, $cacheTokens = TRUE) + { + if (!is_string($filename)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'string' + ); + } + + if (!is_bool($cacheTokens)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 2, 'boolean' + ); + } + + if (!isset(self::$ignoredLines[$filename])) { + self::$ignoredLines[$filename] = array(); + $ignore = FALSE; + $stop = FALSE; + $lines = file($filename); + + foreach ($lines as $index => $line) { + if (!trim($line)) { + self::$ignoredLines[$filename][$index+1] = TRUE; + } + } + + if ($cacheTokens) { + $tokens = PHP_Token_Stream_CachingFactory::get($filename); + } else { + $tokens = new PHP_Token_Stream($filename); + } + + $classes = array_merge($tokens->getClasses(), $tokens->getTraits()); + $tokens = $tokens->tokens(); + + foreach ($tokens as $token) { + switch (get_class($token)) { + case 'PHP_Token_COMMENT': + case 'PHP_Token_DOC_COMMENT': { + + $_token = trim($token); + $_line = trim($lines[$token->getLine() - 1]); + + if ($_token == '// @codeCoverageIgnore' || + $_token == '//@codeCoverageIgnore') { + $ignore = TRUE; + $stop = TRUE; + } + + else if ($_token == '// @codeCoverageIgnoreStart' || + $_token == '//@codeCoverageIgnoreStart') { + $ignore = TRUE; + } + + else if ($_token == '// @codeCoverageIgnoreEnd' || + $_token == '//@codeCoverageIgnoreEnd') { + $stop = TRUE; + } + + // be sure the comment doesn't have some token BEFORE it on the same line... + // it would not be safe to ignore the whole line in those cases. + if (0 === strpos($_token, $_line)) { + $count = substr_count($token, "\n"); + $line = $token->getLine(); + + for ($i = $line; $i < $line + $count; $i++) { + self::$ignoredLines[$filename][$i] = TRUE; + } + + if ($token instanceof PHP_Token_DOC_COMMENT) { + // Workaround for the fact the DOC_COMMENT token + // does not include the final \n character in its + // text. + if (substr(trim($lines[$i-1]), -2) == '*/') { + self::$ignoredLines[$filename][$i] = TRUE; + } + } + } + } + break; + + case 'PHP_Token_INTERFACE': + case 'PHP_Token_TRAIT': + case 'PHP_Token_CLASS': + case 'PHP_Token_FUNCTION': { + $docblock = $token->getDocblock(); + + if (strpos($docblock, '@codeCoverageIgnore')) { + $endLine = $token->getEndLine(); + + for ($i = $token->getLine(); $i <= $endLine; $i++) { + self::$ignoredLines[$filename][$i] = TRUE; + } + } + + else if ($token instanceof PHP_Token_INTERFACE || + $token instanceof PHP_Token_TRAIT || + $token instanceof PHP_Token_CLASS) { + if (empty($classes[$token->getName()]['methods'])) { + for ($i = $token->getLine(); + $i <= $token->getEndLine(); + $i++) { + self::$ignoredLines[$filename][$i] = TRUE; + } + } else { + $firstMethod = array_shift( + $classes[$token->getName()]['methods'] + ); + + do { + $lastMethod = array_pop( + $classes[$token->getName()]['methods'] + ); + } while ($lastMethod !== NULL && substr($lastMethod['signature'], 0, 18) == 'anonymous function'); + + if ($lastMethod === NULL) { + $lastMethod = $firstMethod; + } + + for ($i = $token->getLine(); + $i < $firstMethod['startLine']; + $i++) { + self::$ignoredLines[$filename][$i] = TRUE; + } + + for ($i = $token->getEndLine(); + $i > $lastMethod['endLine']; + $i--) { + self::$ignoredLines[$filename][$i] = TRUE; + } + } + } + } + break; + + case 'PHP_Token_NAMESPACE': { + self::$ignoredLines[$filename][$token->getEndLine()] = TRUE; + } // Intentional fallthrough + case 'PHP_Token_OPEN_TAG': + case 'PHP_Token_CLOSE_TAG': + case 'PHP_Token_USE': { + self::$ignoredLines[$filename][$token->getLine()] = TRUE; + } + break; + } + + if ($ignore) { + self::$ignoredLines[$filename][$token->getLine()] = TRUE; + + if ($stop) { + $ignore = FALSE; + $stop = FALSE; + } + } + } + } + + return self::$ignoredLines[$filename]; + } + + /** + * @param float $a + * @param float $b + * @return float ($a / $b) * 100 + */ + public static function percent($a, $b, $asString = FALSE, $fixedWidth = FALSE) + { + if ($asString && $b == 0) { + return ''; + } + + if ($b > 0) { + $percent = ($a / $b) * 100; + } else { + $percent = 100; + } + + if ($asString) { + if ($fixedWidth) { + return sprintf('%6.2F%%', $percent); + } + + return sprintf('%01.2F%%', $percent); + } else { + return $percent; + } + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.1.0 + */ + +/** + * Exception class for PHP_CodeCoverage component. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.1.0 + */ +class PHP_CodeCoverage_Exception extends RuntimeException +{ +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.0.0 + */ + +/** + * Interface for code coverage drivers. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.0.0 + */ +interface PHP_CodeCoverage_Driver +{ + /** + * Start collection of code coverage information. + */ + public function start(); + + /** + * Stop collection of code coverage information. + * + * @return array + */ + public function stop(); +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.0.0 + */ + +/** + * Filter for blacklisting and whitelisting of code coverage information. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.0.0 + */ +class PHP_CodeCoverage_Filter +{ + /** + * Source files that are blacklisted. + * + * @var array + */ + protected $blacklistedFiles = array(); + + /** + * Source files that are whitelisted. + * + * @var array + */ + protected $whitelistedFiles = array(); + + /** + * @var boolean + */ + protected $blacklistPrefilled = FALSE; + + /** + * Adds a directory to the blacklist (recursively). + * + * @param string $directory + * @param string $suffix + * @param string $prefix + */ + public function addDirectoryToBlacklist($directory, $suffix = '.php', $prefix = '') + { + $facade = new File_Iterator_Facade; + $files = $facade->getFilesAsArray( + $directory, $suffix, $prefix + ); + + foreach ($files as $file) { + $this->addFileToBlacklist($file); + } + } + + /** + * Adds a file to the blacklist. + * + * @param string $filename + */ + public function addFileToBlacklist($filename) + { + $this->blacklistedFiles[realpath($filename)] = TRUE; + } + + /** + * Adds files to the blacklist. + * + * @param array $files + */ + public function addFilesToBlacklist(array $files) + { + foreach ($files as $file) { + $this->addFileToBlacklist($file); + } + } + + /** + * Removes a directory from the blacklist (recursively). + * + * @param string $directory + * @param string $suffix + * @param string $prefix + */ + public function removeDirectoryFromBlacklist($directory, $suffix = '.php', $prefix = '') + { + $facade = new File_Iterator_Facade; + $files = $facade->getFilesAsArray( + $directory, $suffix, $prefix + ); + + foreach ($files as $file) { + $this->removeFileFromBlacklist($file); + } + } + + /** + * Removes a file from the blacklist. + * + * @param string $filename + */ + public function removeFileFromBlacklist($filename) + { + $filename = realpath($filename); + + if (isset($this->blacklistedFiles[$filename])) { + unset($this->blacklistedFiles[$filename]); + } + } + + /** + * Adds a directory to the whitelist (recursively). + * + * @param string $directory + * @param string $suffix + * @param string $prefix + */ + public function addDirectoryToWhitelist($directory, $suffix = '.php', $prefix = '') + { + $facade = new File_Iterator_Facade; + $files = $facade->getFilesAsArray( + $directory, $suffix, $prefix + ); + + foreach ($files as $file) { + $this->addFileToWhitelist($file); + } + } + + /** + * Adds a file to the whitelist. + * + * @param string $filename + */ + public function addFileToWhitelist($filename) + { + $this->whitelistedFiles[realpath($filename)] = TRUE; + } + + /** + * Adds files to the whitelist. + * + * @param array $files + */ + public function addFilesToWhitelist(array $files) + { + foreach ($files as $file) { + $this->addFileToWhitelist($file); + } + } + + /** + * Removes a directory from the whitelist (recursively). + * + * @param string $directory + * @param string $suffix + * @param string $prefix + */ + public function removeDirectoryFromWhitelist($directory, $suffix = '.php', $prefix = '') + { + $facade = new File_Iterator_Facade; + $files = $facade->getFilesAsArray( + $directory, $suffix, $prefix + ); + + foreach ($files as $file) { + $this->removeFileFromWhitelist($file); + } + } + + /** + * Removes a file from the whitelist. + * + * @param string $filename + */ + public function removeFileFromWhitelist($filename) + { + $filename = realpath($filename); + + if (isset($this->whitelistedFiles[$filename])) { + unset($this->whitelistedFiles[$filename]); + } + } + + /** + * Checks whether a filename is a real filename. + * + * @param string $filename + */ + public function isFile($filename) + { + if ($filename == '-' || + strpos($filename, 'eval()\'d code') !== FALSE || + strpos($filename, 'runtime-created function') !== FALSE || + strpos($filename, 'runkit created function') !== FALSE || + strpos($filename, 'assert code') !== FALSE || + strpos($filename, 'regexp code') !== FALSE) { + return FALSE; + } + + return TRUE; + } + + /** + * Checks whether or not a file is filtered. + * + * When the whitelist is empty (default), blacklisting is used. + * When the whitelist is not empty, whitelisting is used. + * + * @param string $filename + * @param boolean $ignoreWhitelist + * @return boolean + * @throws PHP_CodeCoverage_Exception + */ + public function isFiltered($filename) + { + $filename = realpath($filename); + + if (!empty($this->whitelistedFiles)) { + return !isset($this->whitelistedFiles[$filename]); + } + + if (!$this->blacklistPrefilled) { + $this->prefillBlacklist(); + } + + return isset($this->blacklistedFiles[$filename]); + } + + /** + * Returns the list of blacklisted files. + * + * @return array + */ + public function getBlacklist() + { + return array_keys($this->blacklistedFiles); + } + + /** + * Returns the list of whitelisted files. + * + * @return array + */ + public function getWhitelist() + { + return array_keys($this->whitelistedFiles); + } + + /** + * Returns whether this filter has a whitelist. + * + * @return boolean + * @since Method available since Release 1.1.0 + */ + public function hasWhitelist() + { + return !empty($this->whitelistedFiles); + } + + /** + * @since Method available since Release 1.2.3 + */ + protected function prefillBlacklist() + { + if (defined('__PHPUNIT_PHAR__')) { + $this->addFileToBlacklist(__PHPUNIT_PHAR__); + } + + $this->addDirectoryContainingClassToBlacklist('File_Iterator'); + $this->addDirectoryContainingClassToBlacklist('PHP_CodeCoverage'); + $this->addDirectoryContainingClassToBlacklist('PHP_Invoker'); + $this->addDirectoryContainingClassToBlacklist('PHP_Timer'); + $this->addDirectoryContainingClassToBlacklist('PHP_Token'); + $this->addDirectoryContainingClassToBlacklist('PHPUnit_Framework_TestCase', 2); + $this->addDirectoryContainingClassToBlacklist('PHPUnit_Extensions_Database_TestCase', 2); + $this->addDirectoryContainingClassToBlacklist('PHPUnit_Framework_MockObject_Generator', 2); + $this->addDirectoryContainingClassToBlacklist('PHPUnit_Extensions_SeleniumTestCase', 2); + $this->addDirectoryContainingClassToBlacklist('PHPUnit_Extensions_Story_TestCase', 2); + $this->addDirectoryContainingClassToBlacklist('Text_Template'); + $this->addDirectoryContainingClassToBlacklist('Symfony\Component\Yaml\Yaml'); + + $this->blacklistPrefilled = TRUE; + } + + /** + * @param string $className + * @param integer $parent + * @since Method available since Release 1.2.3 + */ + protected function addDirectoryContainingClassToBlacklist($className, $parent = 1) + { + if (!class_exists($className)) { + return; + } + + $reflector = new ReflectionClass($className); + $directory = $reflector->getFileName(); + + for ($i = 0; $i < $parent; $i++) { + $directory = dirname($directory); + } + + $this->addDirectoryToBlacklist($directory); + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.2.1 + */ + +/** + * + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.2.1 + */ +class PHP_CodeCoverage_Version +{ + const VERSION = '1.2.13'; + protected static $version; + + /** + * Returns the version of PHP_CodeCoverage. + * + * @return string + */ + public static function id() + { + if (self::$version === NULL) { + self::$version = self::VERSION; + + if (is_dir(dirname(dirname(__DIR__)) . '/.git')) { + $dir = getcwd(); + chdir(__DIR__); + $version = exec('git describe --tags'); + chdir($dir); + + if ($version) { + if (count(explode('.', self::VERSION)) == 3) { + self::$version = $version; + } else { + $version = explode('-', $version); + + self::$version = self::VERSION . '-' . $version[2]; + } + } + } + } + + return self::$version; + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.1.0 + */ + +/** + * Base class for nodes in the code coverage information tree. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.1.0 + */ +abstract class PHP_CodeCoverage_Report_Node implements Countable +{ + /** + * @var string + */ + protected $name; + + /** + * @var string + */ + protected $path; + + /** + * @var array + */ + protected $pathArray; + + /** + * @var PHP_CodeCoverage_Report_Node + */ + protected $parent; + + /** + * @var string + */ + protected $id; + + /** + * Constructor. + * + * @param string $name + * @param PHP_CodeCoverage_Report_Node $parent + */ + public function __construct($name, PHP_CodeCoverage_Report_Node $parent = NULL) + { + if (substr($name, -1) == '/') { + $name = substr($name, 0, -1); + } + + $this->name = $name; + $this->parent = $parent; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @return string + */ + public function getId() + { + if ($this->id === NULL) { + $parent = $this->getParent(); + + if ($parent === NULL) { + $this->id = 'index'; + } else { + $parentId = $parent->getId(); + + if ($parentId == 'index') { + $this->id = str_replace(':', '_', $this->name); + } else { + $this->id = $parentId . '_' . $this->name; + } + } + } + + return $this->id; + } + + /** + * @return string + */ + public function getPath() + { + if ($this->path === NULL) { + if ($this->parent === NULL) { + $this->path = $this->name; + } else { + $this->path = $this->parent->getPath() . '/' . $this->name; + } + } + + return $this->path; + } + + /** + * @return array + */ + public function getPathAsArray() + { + if ($this->pathArray === NULL) { + if ($this->parent === NULL) { + $this->pathArray = array(); + } else { + $this->pathArray = $this->parent->getPathAsArray(); + } + + $this->pathArray[] = $this; + } + + return $this->pathArray; + } + + /** + * @return PHP_CodeCoverage_Report_Node + */ + public function getParent() + { + return $this->parent; + } + + /** + * Returns the percentage of classes that has been tested. + * + * @param boolean $asString + * @return integer + */ + public function getTestedClassesPercent($asString = TRUE) + { + return PHP_CodeCoverage_Util::percent( + $this->getNumTestedClasses(), + $this->getNumClasses(), + $asString + ); + } + + /** + * Returns the percentage of traits that has been tested. + * + * @param boolean $asString + * @return integer + */ + public function getTestedTraitsPercent($asString = TRUE) + { + return PHP_CodeCoverage_Util::percent( + $this->getNumTestedTraits(), + $this->getNumTraits(), + $asString + ); + } + + /** + * Returns the percentage of traits that has been tested. + * + * @param boolean $asString + * @return integer + * @since Method available since Release 1.2.0 + */ + public function getTestedClassesAndTraitsPercent($asString = TRUE) + { + return PHP_CodeCoverage_Util::percent( + $this->getNumTestedClassesAndTraits(), + $this->getNumClassesAndTraits(), + $asString + ); + } + + /** + * Returns the percentage of methods that has been tested. + * + * @param boolean $asString + * @return integer + */ + public function getTestedMethodsPercent($asString = TRUE) + { + return PHP_CodeCoverage_Util::percent( + $this->getNumTestedMethods(), + $this->getNumMethods(), + $asString + ); + } + + /** + * Returns the percentage of executed lines. + * + * @param boolean $asString + * @return integer + */ + public function getLineExecutedPercent($asString = TRUE) + { + return PHP_CodeCoverage_Util::percent( + $this->getNumExecutedLines(), + $this->getNumExecutableLines(), + $asString + ); + } + + /** + * Returns the number of classes and traits. + * + * @return integer + * @since Method available since Release 1.2.0 + */ + public function getNumClassesAndTraits() + { + return $this->getNumClasses() + $this->getNumTraits(); + } + + /** + * Returns the number of tested classes and traits. + * + * @return integer + * @since Method available since Release 1.2.0 + */ + public function getNumTestedClassesAndTraits() + { + return $this->getNumTestedClasses() + $this->getNumTestedTraits(); + } + + /** + * Returns the classes and traits of this node. + * + * @return array + * @since Method available since Release 1.2.0 + */ + public function getClassesAndTraits() + { + return array_merge($this->getClasses(), $this->getTraits()); + } + + /** + * Returns the classes of this node. + * + * @return array + */ + abstract public function getClasses(); + + /** + * Returns the traits of this node. + * + * @return array + */ + abstract public function getTraits(); + + /** + * Returns the functions of this node. + * + * @return array + */ + abstract public function getFunctions(); + + /** + * Returns the LOC/CLOC/NCLOC of this node. + * + * @return array + */ + abstract public function getLinesOfCode(); + + /** + * Returns the number of executable lines. + * + * @return integer + */ + abstract public function getNumExecutableLines(); + + /** + * Returns the number of executed lines. + * + * @return integer + */ + abstract public function getNumExecutedLines(); + + /** + * Returns the number of classes. + * + * @return integer + */ + abstract public function getNumClasses(); + + /** + * Returns the number of tested classes. + * + * @return integer + */ + abstract public function getNumTestedClasses(); + + /** + * Returns the number of traits. + * + * @return integer + */ + abstract public function getNumTraits(); + + /** + * Returns the number of tested traits. + * + * @return integer + */ + abstract public function getNumTestedTraits(); + + /** + * Returns the number of methods. + * + * @return integer + */ + abstract public function getNumMethods(); + + /** + * Returns the number of tested methods. + * + * @return integer + */ + abstract public function getNumTestedMethods(); + + /** + * Returns the number of functions. + * + * @return integer + */ + abstract public function getNumFunctions(); + + /** + * Returns the number of tested functions. + * + * @return integer + */ + abstract public function getNumTestedFunctions(); +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.1.0 + */ + +/** + * Represents a file in the code coverage information tree. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.1.0 + */ +class PHP_CodeCoverage_Report_Node_File extends PHP_CodeCoverage_Report_Node +{ + /** + * @var array + */ + protected $coverageData; + + /** + * @var array + */ + protected $testData; + + /** + * @var array + */ + protected $ignoredLines; + + /** + * @var integer + */ + protected $numExecutableLines = 0; + + /** + * @var integer + */ + protected $numExecutedLines = 0; + + /** + * @var array + */ + protected $classes = array(); + + /** + * @var array + */ + protected $traits = array(); + + /** + * @var array + */ + protected $functions = array(); + + /** + * @var array + */ + protected $linesOfCode = array(); + + /** + * @var integer + */ + protected $numTestedTraits = 0; + + /** + * @var integer + */ + protected $numTestedClasses = 0; + + /** + * @var integer + */ + protected $numMethods = NULL; + + /** + * @var integer + */ + protected $numTestedMethods = NULL; + + /** + * @var integer + */ + protected $numTestedFunctions = NULL; + + /** + * @var array + */ + protected $startLines = array(); + + /** + * @var array + */ + protected $endLines = array(); + + /** + * @var boolean + */ + protected $cacheTokens; + + /** + * Constructor. + * + * @param string $name + * @param PHP_CodeCoverage_Report_Node $parent + * @param array $coverageData + * @param array $testData + * @param boolean $cacheTokens + * @throws PHP_CodeCoverage_Exception + */ + public function __construct($name, PHP_CodeCoverage_Report_Node $parent, array $coverageData, array $testData, $cacheTokens) + { + if (!is_bool($cacheTokens)) { + throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory( + 1, 'boolean' + ); + } + + parent::__construct($name, $parent); + + $this->coverageData = $coverageData; + $this->testData = $testData; + $this->ignoredLines = PHP_CodeCoverage_Util::getLinesToBeIgnored( + $this->getPath(), $cacheTokens + ); + $this->cacheTokens = $cacheTokens; + + $this->calculateStatistics(); + } + + /** + * Returns the number of files in/under this node. + * + * @return integer + */ + public function count() + { + return 1; + } + + /** + * Returns the code coverage data of this node. + * + * @return array + */ + public function getCoverageData() + { + return $this->coverageData; + } + + /** + * Returns the test data of this node. + * + * @return array + */ + public function getTestData() + { + return $this->testData; + } + + /** + * @return array + */ + public function getIgnoredLines() + { + return $this->ignoredLines; + } + + /** + * Returns the classes of this node. + * + * @return array + */ + public function getClasses() + { + return $this->classes; + } + + /** + * Returns the traits of this node. + * + * @return array + */ + public function getTraits() + { + return $this->traits; + } + + /** + * Returns the functions of this node. + * + * @return array + */ + public function getFunctions() + { + return $this->functions; + } + + /** + * Returns the LOC/CLOC/NCLOC of this node. + * + * @return array + */ + public function getLinesOfCode() + { + return $this->linesOfCode; + } + + /** + * Returns the number of executable lines. + * + * @return integer + */ + public function getNumExecutableLines() + { + return $this->numExecutableLines; + } + + /** + * Returns the number of executed lines. + * + * @return integer + */ + public function getNumExecutedLines() + { + return $this->numExecutedLines; + } + + /** + * Returns the number of classes. + * + * @return integer + */ + public function getNumClasses() + { + return count($this->classes); + } + + /** + * Returns the number of tested classes. + * + * @return integer + */ + public function getNumTestedClasses() + { + return $this->numTestedClasses; + } + + /** + * Returns the number of traits. + * + * @return integer + */ + public function getNumTraits() + { + return count($this->traits); + } + + /** + * Returns the number of tested traits. + * + * @return integer + */ + public function getNumTestedTraits() + { + return $this->numTestedTraits; + } + + /** + * Returns the number of methods. + * + * @return integer + */ + public function getNumMethods() + { + if ($this->numMethods === NULL) { + $this->numMethods = 0; + + foreach ($this->classes as $class) { + foreach ($class['methods'] as $method) { + if ($method['executableLines'] > 0) { + $this->numMethods++; + } + } + } + + foreach ($this->traits as $trait) { + foreach ($trait['methods'] as $method) { + if ($method['executableLines'] > 0) { + $this->numMethods++; + } + } + } + } + + return $this->numMethods; + } + + /** + * Returns the number of tested methods. + * + * @return integer + */ + public function getNumTestedMethods() + { + if ($this->numTestedMethods === NULL) { + $this->numTestedMethods = 0; + + foreach ($this->classes as $class) { + foreach ($class['methods'] as $method) { + if ($method['executableLines'] > 0 && + $method['coverage'] == 100) { + $this->numTestedMethods++; + } + } + } + + foreach ($this->traits as $trait) { + foreach ($trait['methods'] as $method) { + if ($method['executableLines'] > 0 && + $method['coverage'] == 100) { + $this->numTestedMethods++; + } + } + } + } + + return $this->numTestedMethods; + } + + /** + * Returns the number of functions. + * + * @return integer + */ + public function getNumFunctions() + { + return count($this->functions); + } + + /** + * Returns the number of tested functions. + * + * @return integer + */ + public function getNumTestedFunctions() + { + if ($this->numTestedFunctions === NULL) { + $this->numTestedFunctions = 0; + + foreach ($this->functions as $function) { + if ($function['executableLines'] > 0 && + $function['coverage'] == 100) { + $this->numTestedFunctions++; + } + } + } + + return $this->numTestedFunctions; + } + + /** + * Calculates coverage statistics for the file. + */ + protected function calculateStatistics() + { + if ($this->cacheTokens) { + $tokens = PHP_Token_Stream_CachingFactory::get($this->getPath()); + } else { + $tokens = new PHP_Token_Stream($this->getPath()); + } + + $this->processClasses($tokens); + $this->processTraits($tokens); + $this->processFunctions($tokens); + $this->linesOfCode = $tokens->getLinesOfCode(); + unset($tokens); + + for ($lineNumber = 1; $lineNumber <= $this->linesOfCode['loc']; $lineNumber++) { + if (isset($this->startLines[$lineNumber])) { + // Start line of a class. + if (isset($this->startLines[$lineNumber]['className'])) { + $currentClass = &$this->startLines[$lineNumber]; + } + + // Start line of a trait. + else if (isset($this->startLines[$lineNumber]['traitName'])) { + $currentTrait = &$this->startLines[$lineNumber]; + } + + // Start line of a method. + else if (isset($this->startLines[$lineNumber]['methodName'])) { + $currentMethod = &$this->startLines[$lineNumber]; + } + + // Start line of a function. + else if (isset($this->startLines[$lineNumber]['functionName'])) { + $currentFunction = &$this->startLines[$lineNumber]; + } + } + + if (!isset($this->ignoredLines[$lineNumber]) && + isset($this->coverageData[$lineNumber]) && + $this->coverageData[$lineNumber] !== NULL) { + if (isset($currentClass)) { + $currentClass['executableLines']++; + } + + if (isset($currentTrait)) { + $currentTrait['executableLines']++; + } + + if (isset($currentMethod)) { + $currentMethod['executableLines']++; + } + + if (isset($currentFunction)) { + $currentFunction['executableLines']++; + } + + $this->numExecutableLines++; + + if (count($this->coverageData[$lineNumber]) > 0 || + isset($this->ignoredLines[$lineNumber])) { + if (isset($currentClass)) { + $currentClass['executedLines']++; + } + + if (isset($currentTrait)) { + $currentTrait['executedLines']++; + } + + if (isset($currentMethod)) { + $currentMethod['executedLines']++; + } + + if (isset($currentFunction)) { + $currentFunction['executedLines']++; + } + + $this->numExecutedLines++; + } + } + + if (isset($this->endLines[$lineNumber])) { + // End line of a class. + if (isset($this->endLines[$lineNumber]['className'])) { + unset($currentClass); + } + + // End line of a trait. + else if (isset($this->endLines[$lineNumber]['traitName'])) { + unset($currentTrait); + } + + // End line of a method. + else if (isset($this->endLines[$lineNumber]['methodName'])) { + unset($currentMethod); + } + + // End line of a function. + else if (isset($this->endLines[$lineNumber]['functionName'])) { + unset($currentFunction); + } + } + } + + foreach ($this->traits as &$trait) { + foreach ($trait['methods'] as &$method) { + if ($method['executableLines'] > 0) { + $method['coverage'] = ($method['executedLines'] / + $method['executableLines']) * 100; + } else { + $method['coverage'] = 100; + } + + $method['crap'] = $this->crap( + $method['ccn'], $method['coverage'] + ); + + $trait['ccn'] += $method['ccn']; + } + + if ($trait['executableLines'] > 0) { + $trait['coverage'] = ($trait['executedLines'] / + $trait['executableLines']) * 100; + } else { + $trait['coverage'] = 100; + } + + if ($trait['coverage'] == 100) { + $this->numTestedClasses++; + } + + $trait['crap'] = $this->crap( + $trait['ccn'], $trait['coverage'] + ); + } + + foreach ($this->classes as &$class) { + foreach ($class['methods'] as &$method) { + if ($method['executableLines'] > 0) { + $method['coverage'] = ($method['executedLines'] / + $method['executableLines']) * 100; + } else { + $method['coverage'] = 100; + } + + $method['crap'] = $this->crap( + $method['ccn'], $method['coverage'] + ); + + $class['ccn'] += $method['ccn']; + } + + if ($class['executableLines'] > 0) { + $class['coverage'] = ($class['executedLines'] / + $class['executableLines']) * 100; + } else { + $class['coverage'] = 100; + } + + if ($class['coverage'] == 100) { + $this->numTestedClasses++; + } + + $class['crap'] = $this->crap( + $class['ccn'], $class['coverage'] + ); + } + } + + /** + * @param PHP_Token_Stream $tokens + */ + protected function processClasses(PHP_Token_Stream $tokens) + { + $classes = $tokens->getClasses(); + unset($tokens); + + $link = $this->getId() . '.html#'; + + foreach ($classes as $className => $class) { + $this->classes[$className] = array( + 'className' => $className, + 'methods' => array(), + 'startLine' => $class['startLine'], + 'executableLines' => 0, + 'executedLines' => 0, + 'ccn' => 0, + 'coverage' => 0, + 'crap' => 0, + 'package' => $class['package'], + 'link' => $link . $class['startLine'] + ); + + $this->startLines[$class['startLine']] = &$this->classes[$className]; + $this->endLines[$class['endLine']] = &$this->classes[$className]; + + foreach ($class['methods'] as $methodName => $method) { + $this->classes[$className]['methods'][$methodName] = array( + 'methodName' => $methodName, + 'signature' => $method['signature'], + 'startLine' => $method['startLine'], + 'endLine' => $method['endLine'], + 'executableLines' => 0, + 'executedLines' => 0, + 'ccn' => $method['ccn'], + 'coverage' => 0, + 'crap' => 0, + 'link' => $link . $method['startLine'] + ); + + $this->startLines[$method['startLine']] = &$this->classes[$className]['methods'][$methodName]; + $this->endLines[$method['endLine']] = &$this->classes[$className]['methods'][$methodName]; + } + } + } + + /** + * @param PHP_Token_Stream $tokens + */ + protected function processTraits(PHP_Token_Stream $tokens) + { + $traits = $tokens->getTraits(); + unset($tokens); + + $link = $this->getId() . '.html#'; + + foreach ($traits as $traitName => $trait) { + $this->traits[$traitName] = array( + 'traitName' => $traitName, + 'methods' => array(), + 'startLine' => $trait['startLine'], + 'executableLines' => 0, + 'executedLines' => 0, + 'ccn' => 0, + 'coverage' => 0, + 'crap' => 0, + 'package' => $trait['package'], + 'link' => $link . $trait['startLine'] + ); + + $this->startLines[$trait['startLine']] = &$this->traits[$traitName]; + $this->endLines[$trait['endLine']] = &$this->traits[$traitName]; + + foreach ($trait['methods'] as $methodName => $method) { + $this->traits[$traitName]['methods'][$methodName] = array( + 'methodName' => $methodName, + 'signature' => $method['signature'], + 'startLine' => $method['startLine'], + 'endLine' => $method['endLine'], + 'executableLines' => 0, + 'executedLines' => 0, + 'ccn' => $method['ccn'], + 'coverage' => 0, + 'crap' => 0, + 'link' => $link . $method['startLine'] + ); + + $this->startLines[$method['startLine']] = &$this->traits[$traitName]['methods'][$methodName]; + $this->endLines[$method['endLine']] = &$this->traits[$traitName]['methods'][$methodName]; + } + } + } + + /** + * @param PHP_Token_Stream $tokens + */ + protected function processFunctions(PHP_Token_Stream $tokens) + { + $functions = $tokens->getFunctions(); + unset($tokens); + + $link = $this->getId() . '.html#'; + + foreach ($functions as $functionName => $function) { + $this->functions[$functionName] = array( + 'functionName' => $functionName, + 'signature' => $function['signature'], + 'startLine' => $function['startLine'], + 'executableLines' => 0, + 'executedLines' => 0, + 'ccn' => $function['ccn'], + 'coverage' => 0, + 'crap' => 0, + 'link' => $link . $function['startLine'] + ); + + $this->startLines[$function['startLine']] = &$this->functions[$functionName]; + $this->endLines[$function['endLine']] = &$this->functions[$functionName]; + } + } + + /** + * Calculates the Change Risk Anti-Patterns (CRAP) index for a unit of code + * based on its cyclomatic complexity and percentage of code coverage. + * + * @param integer $ccn + * @param float $coverage + * @return string + * @since Method available since Release 1.2.0 + */ + protected function crap($ccn, $coverage) + { + if ($coverage == 0) { + return (string)pow($ccn, 2) + $ccn; + } + + if ($coverage >= 95) { + return (string)$ccn; + } + + return sprintf( + '%01.2F', pow($ccn, 2) * pow(1 - $coverage/100, 3) + $ccn + ); + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.1.0 + */ + +/** + * Recursive iterator for PHP_CodeCoverage_Report_Node object graphs. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.1.0 + */ +class PHP_CodeCoverage_Report_Node_Iterator implements RecursiveIterator +{ + /** + * @var integer + */ + protected $position; + + /** + * @var PHP_CodeCoverage_Report_Node[] + */ + protected $nodes; + + /** + * Constructor. + * + * @param PHP_CodeCoverage_Report_Node_Directory $node + */ + public function __construct(PHP_CodeCoverage_Report_Node_Directory $node) + { + $this->nodes = $node->getChildNodes(); + } + + /** + * Rewinds the Iterator to the first element. + * + */ + public function rewind() + { + $this->position = 0; + } + + /** + * Checks if there is a current element after calls to rewind() or next(). + * + * @return boolean + */ + public function valid() + { + return $this->position < count($this->nodes); + } + + /** + * Returns the key of the current element. + * + * @return integer + */ + public function key() + { + return $this->position; + } + + /** + * Returns the current element. + * + * @return PHPUnit_Framework_Test + */ + public function current() + { + return $this->valid() ? $this->nodes[$this->position] : NULL; + } + + /** + * Moves forward to next element. + * + */ + public function next() + { + $this->position++; + } + + /** + * Returns the sub iterator for the current element. + * + * @return PHP_CodeCoverage_Report_Node_Iterator + */ + public function getChildren() + { + return new PHP_CodeCoverage_Report_Node_Iterator( + $this->nodes[$this->position] + ); + } + + /** + * Checks whether the current element has children. + * + * @return boolean + */ + public function hasChildren() + { + return $this->nodes[$this->position] instanceof PHP_CodeCoverage_Report_Node_Directory; + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.1.0 + */ + +/** + * Represents a directory in the code coverage information tree. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.1.0 + */ +class PHP_CodeCoverage_Report_Node_Directory extends PHP_CodeCoverage_Report_Node implements IteratorAggregate +{ + /** + * @var PHP_CodeCoverage_Report_Node[] + */ + protected $children = array(); + + /** + * @var PHP_CodeCoverage_Report_Node_Directory[] + */ + protected $directories = array(); + + /** + * @var PHP_CodeCoverage_Report_Node_File[] + */ + protected $files = array(); + + /** + * @var array + */ + protected $classes; + + /** + * @var array + */ + protected $traits; + + /** + * @var array + */ + protected $functions; + + /** + * @var array + */ + protected $linesOfCode = NULL; + + /** + * @var integer + */ + protected $numFiles = -1; + + /** + * @var integer + */ + protected $numExecutableLines = -1; + + /** + * @var integer + */ + protected $numExecutedLines = -1; + + /** + * @var integer + */ + protected $numClasses = -1; + + /** + * @var integer + */ + protected $numTestedClasses = -1; + + /** + * @var integer + */ + protected $numTraits = -1; + + /** + * @var integer + */ + protected $numTestedTraits = -1; + + /** + * @var integer + */ + protected $numMethods = -1; + + /** + * @var integer + */ + protected $numTestedMethods = -1; + + /** + * @var integer + */ + protected $numFunctions = -1; + + /** + * @var integer + */ + protected $numTestedFunctions = -1; + + /** + * Returns the number of files in/under this node. + * + * @return integer + */ + public function count() + { + if ($this->numFiles == -1) { + $this->numFiles = 0; + + foreach ($this->children as $child) { + $this->numFiles += count($child); + } + } + + return $this->numFiles; + } + + /** + * Returns an iterator for this node. + * + * @return RecursiveIteratorIterator + */ + public function getIterator() + { + return new RecursiveIteratorIterator( + new PHP_CodeCoverage_Report_Node_Iterator($this), + RecursiveIteratorIterator::SELF_FIRST + ); + } + + /** + * Adds a new directory. + * + * @param string $name + * @return PHP_CodeCoverage_Report_Node_Directory + */ + public function addDirectory($name) + { + $directory = new PHP_CodeCoverage_Report_Node_Directory($name, $this); + + $this->children[] = $directory; + $this->directories[] = &$this->children[count($this->children) - 1]; + + return $directory; + } + + /** + * Adds a new file. + * + * @param string $name + * @param array $coverageData + * @param array $testData + * @param boolean $cacheTokens + * @return PHP_CodeCoverage_Report_Node_File + * @throws PHP_CodeCoverage_Exception + */ + public function addFile($name, array $coverageData, array $testData, $cacheTokens) + { + $file = new PHP_CodeCoverage_Report_Node_File( + $name, $this, $coverageData, $testData, $cacheTokens + ); + + $this->children[] = $file; + $this->files[] = &$this->children[count($this->children) - 1]; + + $this->numExecutableLines = -1; + $this->numExecutedLines = -1; + + return $file; + } + + /** + * Returns the directories in this directory. + * + * @return array + */ + public function getDirectories() + { + return $this->directories; + } + + /** + * Returns the files in this directory. + * + * @return array + */ + public function getFiles() + { + return $this->files; + } + + /** + * Returns the child nodes of this node. + * + * @return array + */ + public function getChildNodes() + { + return $this->children; + } + + /** + * Returns the classes of this node. + * + * @return array + */ + public function getClasses() + { + if ($this->classes === NULL) { + $this->classes = array(); + + foreach ($this->children as $child) { + $this->classes = array_merge( + $this->classes, $child->getClasses() + ); + } + } + + return $this->classes; + } + + /** + * Returns the traits of this node. + * + * @return array + */ + public function getTraits() + { + if ($this->traits === NULL) { + $this->traits = array(); + + foreach ($this->children as $child) { + $this->traits = array_merge( + $this->traits, $child->getTraits() + ); + } + } + + return $this->traits; + } + + /** + * Returns the functions of this node. + * + * @return array + */ + public function getFunctions() + { + if ($this->functions === NULL) { + $this->functions = array(); + + foreach ($this->children as $child) { + $this->functions = array_merge( + $this->functions, $child->getFunctions() + ); + } + } + + return $this->functions; + } + + /** + * Returns the LOC/CLOC/NCLOC of this node. + * + * @return array + */ + public function getLinesOfCode() + { + if ($this->linesOfCode === NULL) { + $this->linesOfCode = array('loc' => 0, 'cloc' => 0, 'ncloc' => 0); + + foreach ($this->children as $child) { + $linesOfCode = $child->getLinesOfCode(); + + $this->linesOfCode['loc'] += $linesOfCode['loc']; + $this->linesOfCode['cloc'] += $linesOfCode['cloc']; + $this->linesOfCode['ncloc'] += $linesOfCode['ncloc']; + } + } + + return $this->linesOfCode; + } + + /** + * Returns the number of executable lines. + * + * @return integer + */ + public function getNumExecutableLines() + { + if ($this->numExecutableLines == -1) { + $this->numExecutableLines = 0; + + foreach ($this->children as $child) { + $this->numExecutableLines += $child->getNumExecutableLines(); + } + } + + return $this->numExecutableLines; + } + + /** + * Returns the number of executed lines. + * + * @return integer + */ + public function getNumExecutedLines() + { + if ($this->numExecutedLines == -1) { + $this->numExecutedLines = 0; + + foreach ($this->children as $child) { + $this->numExecutedLines += $child->getNumExecutedLines(); + } + } + + return $this->numExecutedLines; + } + + /** + * Returns the number of classes. + * + * @return integer + */ + public function getNumClasses() + { + if ($this->numClasses == -1) { + $this->numClasses = 0; + + foreach ($this->children as $child) { + $this->numClasses += $child->getNumClasses(); + } + } + + return $this->numClasses; + } + + /** + * Returns the number of tested classes. + * + * @return integer + */ + public function getNumTestedClasses() + { + if ($this->numTestedClasses == -1) { + $this->numTestedClasses = 0; + + foreach ($this->children as $child) { + $this->numTestedClasses += $child->getNumTestedClasses(); + } + } + + return $this->numTestedClasses; + } + + /** + * Returns the number of traits. + * + * @return integer + */ + public function getNumTraits() + { + if ($this->numTraits == -1) { + $this->numTraits = 0; + + foreach ($this->children as $child) { + $this->numTraits += $child->getNumTraits(); + } + } + + return $this->numTraits; + } + + /** + * Returns the number of tested traits. + * + * @return integer + */ + public function getNumTestedTraits() + { + if ($this->numTestedTraits == -1) { + $this->numTestedTraits = 0; + + foreach ($this->children as $child) { + $this->numTestedTraits += $child->getNumTestedTraits(); + } + } + + return $this->numTestedTraits; + } + + /** + * Returns the number of methods. + * + * @return integer + */ + public function getNumMethods() + { + if ($this->numMethods == -1) { + $this->numMethods = 0; + + foreach ($this->children as $child) { + $this->numMethods += $child->getNumMethods(); + } + } + + return $this->numMethods; + } + + /** + * Returns the number of tested methods. + * + * @return integer + */ + public function getNumTestedMethods() + { + if ($this->numTestedMethods == -1) { + $this->numTestedMethods = 0; + + foreach ($this->children as $child) { + $this->numTestedMethods += $child->getNumTestedMethods(); + } + } + + return $this->numTestedMethods; + } + + /** + * Returns the number of functions. + * + * @return integer + */ + public function getNumFunctions() + { + if ($this->numFunctions == -1) { + $this->numFunctions = 0; + + foreach ($this->children as $child) { + $this->numFunctions += $child->getNumFunctions(); + } + } + + return $this->numFunctions; + } + + /** + * Returns the number of tested functions. + * + * @return integer + */ + public function getNumTestedFunctions() + { + if ($this->numTestedFunctions == -1) { + $this->numTestedFunctions = 0; + + foreach ($this->children as $child) { + $this->numTestedFunctions += $child->getNumTestedFunctions(); + } + } + + return $this->numTestedFunctions; + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.1.0 + */ + +/** + * Base class for PHP_CodeCoverage_Report_Node renderers. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.1.0 + */ +abstract class PHP_CodeCoverage_Report_HTML_Renderer +{ + /** + * @var string + */ + protected $templatePath; + + /** + * @var string + */ + protected $charset; + + /** + * @var string + */ + protected $generator; + + /** + * @var string + */ + protected $date; + + /** + * @var integer + */ + protected $lowUpperBound; + + /** + * @var integer + */ + protected $highLowerBound; + + /** + * Constructor. + * + * @param string $templatePath + * @param string $charset + * @param string $generator + * @param string $date + * @param integer $lowUpperBound + * @param integer $highLowerBound + */ + public function __construct($templatePath, $charset, $generator, $date, $lowUpperBound, $highLowerBound) + { + $this->templatePath = $templatePath; + $this->charset = $charset; + $this->generator = $generator; + $this->date = $date; + $this->lowUpperBound = $lowUpperBound; + $this->highLowerBound = $highLowerBound; + } + + /** + * @param Text_Template $template + * @param array $data + * @return string + */ + protected function renderItemTemplate(Text_Template $template, array $data) + { + $numSeperator = ' / '; + $classesBar = ' '; + $classesLevel = 'None'; + $classesNumber = ' '; + + if (isset($data['numClasses']) && $data['numClasses'] > 0) { + $classesLevel = $this->getColorLevel($data['testedClassesPercent']); + + $classesNumber = $data['numTestedClasses'] . $numSeperator . + $data['numClasses']; + + $classesBar = $this->getCoverageBar( + $data['testedClassesPercent'] + ); + } + + $methodsBar = ' '; + $methodsLevel = 'None'; + $methodsNumber = ' '; + + if ($data['numMethods'] > 0) { + $methodsLevel = $this->getColorLevel($data['testedMethodsPercent']); + + $methodsNumber = $data['numTestedMethods'] . $numSeperator . + $data['numMethods']; + + $methodsBar = $this->getCoverageBar( + $data['testedMethodsPercent'] + ); + } + + $linesBar = ' '; + $linesLevel = 'None'; + $linesNumber = ' '; + + if ($data['numExecutableLines'] > 0) { + $linesLevel = $this->getColorLevel($data['linesExecutedPercent']); + + $linesNumber = $data['numExecutedLines'] . $numSeperator . + $data['numExecutableLines']; + + $linesBar = $this->getCoverageBar( + $data['linesExecutedPercent'] + ); + } + + $template->setVar( + array( + 'icon' => isset($data['icon']) ? $data['icon'] : '', + 'crap' => isset($data['crap']) ? $data['crap'] : '', + 'name' => $data['name'], + 'lines_bar' => $linesBar, + 'lines_executed_percent' => $data['linesExecutedPercentAsString'], + 'lines_level' => $linesLevel, + 'lines_number' => $linesNumber, + 'methods_bar' => $methodsBar, + 'methods_tested_percent' => $data['testedMethodsPercentAsString'], + 'methods_level' => $methodsLevel, + 'methods_number' => $methodsNumber, + 'classes_bar' => $classesBar, + 'classes_tested_percent' => isset($data['testedClassesPercentAsString']) ? $data['testedClassesPercentAsString'] : '', + 'classes_level' => $classesLevel, + 'classes_number' => $classesNumber + ) + ); + + return $template->render(); + } + + /** + * @param Text_Template $template + * @param PHP_CodeCoverage_Report_Node $node + */ + protected function setCommonTemplateVariables(Text_Template $template, PHP_CodeCoverage_Report_Node $node) + { + $template->setVar( + array( + 'id' => $node->getId(), + 'full_path' => $node->getPath(), + 'breadcrumbs' => $this->getBreadcrumbs($node), + 'charset' => $this->charset, + 'date' => $this->date, + 'version' => PHP_CodeCoverage_Version::id(), + 'php_version' => PHP_VERSION, + 'generator' => $this->generator, + 'low_upper_bound' => $this->lowUpperBound, + 'high_lower_bound' => $this->highLowerBound + ) + ); + } + + protected function getBreadcrumbs(PHP_CodeCoverage_Report_Node $node) + { + $breadcrumbs = ''; + + $path = $node->getPathAsArray(); + + foreach ($path as $step) { + if ($step !== $node) { + $breadcrumbs .= $this->getInactiveBreadcrumb($step); + } else { + $breadcrumbs .= $this->getActiveBreadcrumb( + $step, + $node instanceof PHP_CodeCoverage_Report_Node_Directory + ); + } + } + + return $breadcrumbs; + } + + protected function getActiveBreadcrumb(PHP_CodeCoverage_Report_Node $node, $isDirectory) + { + $buffer = sprintf( + '
  • %s
  • ' . "\n", + $node->getName() + ); + + if ($isDirectory) { + $buffer .= sprintf( + '
  • (Dashboard)
  • ' . "\n", + $node->getId() + ); + } + + return $buffer; + } + + protected function getInactiveBreadcrumb(PHP_CodeCoverage_Report_Node $node) + { + return sprintf( + '
  • %s /
  • ' . "\n", + $node->getId(), + $node->getName() + ); + } + + protected function getCoverageBar($percent) + { + $level = $this->getColorLevel($percent); + + $template = new Text_Template( + $this->templatePath . 'coverage_bar.html' + ); + + $template->setVar(array('level' => $level, 'percent' => sprintf("%.2F", $percent))); + + return $template->render(); + } + + /** + * @param integer $percent + * @return string + */ + protected function getColorLevel($percent) + { + if ($percent < $this->lowUpperBound) { + return 'danger'; + } + + else if ($percent >= $this->lowUpperBound && + $percent < $this->highLowerBound) { + return 'warning'; + } + + else { + return 'success'; + } + } +} +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.1.0 + */ + +// @codeCoverageIgnoreStart +if (!defined('T_TRAIT')) { + define('T_TRAIT', 1001); +} + +if (!defined('T_INSTEADOF')) { + define('T_INSTEADOF', 1002); +} + +if (!defined('T_CALLABLE')) { + define('T_CALLABLE', 1003); +} +// @codeCoverageIgnoreEnd + +/** + * Renders a PHP_CodeCoverage_Report_Node_File node. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2013 Sebastian Bergmann + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.1.0 + */ +class PHP_CodeCoverage_Report_HTML_Renderer_File extends PHP_CodeCoverage_Report_HTML_Renderer +{ + /** + * @var boolean + */ + protected $highlight; + + /** + * Constructor. + * + * @param string $templatePath + * @param string $charset + * @param string $generator + * @param string $date + * @param integer $lowUpperBound + * @param integer $highLowerBound + * @param boolean $highlight + */ + public function __construct($templatePath, $charset, $generator, $date, $lowUpperBound, $highLowerBound, $highlight) + { + parent::__construct( + $templatePath, + $charset, + $generator, + $date, + $lowUpperBound, + $highLowerBound + ); + + $this->highlight = $highlight; + } + + /** + * @param PHP_CodeCoverage_Report_Node_File $node + * @param string $file + */ + public function render(PHP_CodeCoverage_Report_Node_File $node, $file) + { + $template = new Text_Template($this->templatePath . 'file.html'); + + $template->setVar( + array( + 'items' => $this->renderItems($node), + 'lines' => $this->renderSource($node) + ) + ); + + $this->setCommonTemplateVariables($template, $node); + + $template->renderTo($file); + } + + /** + * @param PHP_CodeCoverage_Report_Node_File $node + * @return string + */ + protected function renderItems(PHP_CodeCoverage_Report_Node_File $node) + { + $template = new Text_Template($this->templatePath . 'file_item.html'); + + $methodItemTemplate = new Text_Template( + $this->templatePath . 'method_item.html' + ); + + $items = $this->renderItemTemplate( + $template, + array( + 'name' => 'Total', + 'numClasses' => $node->getNumClassesAndTraits(), + 'numTestedClasses' => $node->getNumTestedClassesAndTraits(), + 'numMethods' => $node->getNumMethods(), + 'numTestedMethods' => $node->getNumTestedMethods(), + 'linesExecutedPercent' => $node->getLineExecutedPercent(FALSE), + 'linesExecutedPercentAsString' => $node->getLineExecutedPercent(), + 'numExecutedLines' => $node->getNumExecutedLines(), + 'numExecutableLines' => $node->getNumExecutableLines(), + 'testedMethodsPercent' => $node->getTestedMethodsPercent(FALSE), + 'testedMethodsPercentAsString' => $node->getTestedMethodsPercent(), + 'testedClassesPercent' => $node->getTestedClassesAndTraitsPercent(FALSE), + 'testedClassesPercentAsString' => $node->getTestedClassesAndTraitsPercent(), + 'crap' => 'CRAP' + ) + ); + + $items .= $this->renderFunctionItems( + $node->getFunctions(), $methodItemTemplate + ); + + $items .= $this->renderTraitOrClassItems( + $node->getTraits(), $template, $methodItemTemplate + ); + + $items .= $this->renderTraitOrClassItems( + $node->getClasses(), $template, $methodItemTemplate + ); + + return $items; + } + + /** + * @param array $items + * @param Text_Template $template + * @return string + */ + protected function renderTraitOrClassItems(array $items, Text_Template $template, Text_Template $methodItemTemplate) + { + if (empty($items)) { + return ''; + } + + $buffer = ''; + + foreach ($items as $name => $item) { + $numMethods = count($item['methods']); + $numTestedMethods = 0; + + foreach ($item['methods'] as $method) { + if ($method['executedLines'] == $method['executableLines']) { + $numTestedMethods++; + } + } + + $buffer .= $this->renderItemTemplate( + $template, + array( + 'name' => $name, + 'numClasses' => 1, + 'numTestedClasses' => $numTestedMethods == $numMethods ? 1 : 0, + 'numMethods' => $numMethods, + 'numTestedMethods' => $numTestedMethods, + 'linesExecutedPercent' => PHP_CodeCoverage_Util::percent( + $item['executedLines'], + $item['executableLines'], + FALSE + ), + 'linesExecutedPercentAsString' => PHP_CodeCoverage_Util::percent( + $item['executedLines'], + $item['executableLines'], + TRUE + ), + 'numExecutedLines' => $item['executedLines'], + 'numExecutableLines' => $item['executableLines'], + 'testedMethodsPercent' => PHP_CodeCoverage_Util::percent( + $numTestedMethods, + $numMethods, + FALSE + ), + 'testedMethodsPercentAsString' => PHP_CodeCoverage_Util::percent( + $numTestedMethods, + $numMethods, + TRUE + ), + 'testedClassesPercent' => PHP_CodeCoverage_Util::percent( + $numTestedMethods == $numMethods ? 1 : 0, + 1, + FALSE + ), + 'testedClassesPercentAsString' => PHP_CodeCoverage_Util::percent( + $numTestedMethods == $numMethods ? 1 : 0, + 1, + TRUE + ), + 'crap' => $item['crap'] + ) + ); + + foreach ($item['methods'] as $method) { + $buffer .= $this->renderFunctionOrMethodItem( + $methodItemTemplate, $method, ' ' + ); + } + } + + return $buffer; + } + + /** + * @param array $functions + * @param Text_Template $template + * @return string + */ + protected function renderFunctionItems(array $functions, Text_Template $template) + { + if (empty($functions)) { + return ''; + } + + $buffer = ''; + + foreach ($functions as $function) { + $buffer .= $this->renderFunctionOrMethodItem( + $template, $function + ); + } + + return $buffer; + } + + /** + * @param Text_Template $template + * @return string + */ + protected function renderFunctionOrMethodItem(Text_Template $template, array $item, $indent = '') + { + $numTestedItems = $item['executedLines'] == $item['executableLines'] ? 1 : 0; + + return $this->renderItemTemplate( + $template, + array( + 'name' => sprintf( + '%s%s', + $indent, + $item['startLine'], + htmlspecialchars($item['signature']) + ), + 'numMethods' => 1, + 'numTestedMethods' => $numTestedItems, + 'linesExecutedPercent' => PHP_CodeCoverage_Util::percent( + $item['executedLines'], + $item['executableLines'], + FALSE + ), + 'linesExecutedPercentAsString' => PHP_CodeCoverage_Util::percent( + $item['executedLines'], + $item['executableLines'], + TRUE + ), + 'numExecutedLines' => $item['executedLines'], + 'numExecutableLines' => $item['executableLines'], + 'testedMethodsPercent' => PHP_CodeCoverage_Util::percent( + $numTestedItems, + 1, + FALSE + ), + 'testedMethodsPercentAsString' => PHP_CodeCoverage_Util::percent( + $numTestedItems, + 1, + TRUE + ), + 'crap' => $item['crap'] + ) + ); + } + + /** + * @param PHP_CodeCoverage_Report_Node_File $node + * @return string + */ + protected function renderSource(PHP_CodeCoverage_Report_Node_File $node) + { + $coverageData = $node->getCoverageData(); + $ignoredLines = $node->getIgnoredLines(); + $testData = $node->getTestData(); + $codeLines = $this->loadFile($node->getPath()); + $lines = ''; + $i = 1; + + foreach ($codeLines as $line) { + $numTests = ''; + $trClass = ''; + $popoverContent = ''; + $popoverTitle = ''; + + if (!isset($ignoredLines[$i]) && isset($coverageData[$i])) { + $numTests = count($coverageData[$i]); + + if ($coverageData[$i] === NULL) { + $trClass = ' class="warning"'; + } + + else if ($numTests == 0) { + $trClass = ' class="danger"'; + } + + else { + $trClass = ' class="success popin"'; + $popoverContent = '
      '; + + if ($numTests > 1) { + $popoverTitle = $numTests . ' tests cover line ' . $i; + } else { + $popoverTitle = '1 test covers line ' . $i; + } + + foreach ($coverageData[$i] as $test) { + switch ($testData[$test]) { + case 0: { + $testCSS = ' class="success"'; + } + break; + + case 1: + case 2: { + $testCSS = ' class="warning"'; + } + break; + + case 3: { + $testCSS = ' class="danger"'; + } + break; + + case 4: { + $testCSS = ' class="danger"'; + } + break; + + default: { + $testCSS = ''; + } + } + + $popoverContent .= sprintf( + '%s', + + $testCSS, + htmlspecialchars($test) + ); + } + + $popoverContent .= '
    '; + } + } + + if (!empty($popoverTitle)) { + $popover = sprintf( + ' data-title="%s" data-content="%s" data-placement="bottom" data-html="true"', + $popoverTitle, + htmlspecialchars($popoverContent) + ); + } else { + $popover = ''; + } + + $lines .= sprintf( + ' %s' . "\n", + $trClass, + $popover, + $i, + $i, + $i, + !$this->highlight ? htmlspecialchars($line) : $line + ); + + $i++; + } + + return $lines; + } + + /** + * @param string $file + * @return array + */ + protected function loadFile($file) + { + $buffer = file_get_contents($file); + $lines = explode("\n", str_replace("\t", ' ', $buffer)); + $result = array(); + + if (count($lines) == 0) { + return $result; + } + + $lines = array_map('rtrim', $lines); + + if (!$this->highlight) { + unset($lines[count($lines)-1]); + return $lines; + } + + $tokens = token_get_all($buffer); + $stringFlag = FALSE; + $i = 0; + $result[$i] = ''; + + foreach ($tokens as $j => $token) { + if (is_string($token)) { + if ($token === '"' && $tokens[$j - 1] !== '\\') { + $result[$i] .= sprintf( + '%s', + + htmlspecialchars($token) + ); + + $stringFlag = !$stringFlag; + } else { + $result[$i] .= sprintf( + '%s', + + htmlspecialchars($token) + ); + } + + continue; + } + + list ($token, $value) = $token; + + $value = str_replace( + array("\t", ' '), + array('    ', ' '), + htmlspecialchars($value) + ); + + if ($value === "\n") { + $result[++$i] = ''; + } else { + $lines = explode("\n", $value); + + foreach ($lines as $jj => $line) { + $line = trim($line); + + if ($line !== '') { + if ($stringFlag) { + $colour = 'string'; + } else { + switch ($token) { + case T_INLINE_HTML: { + $colour = 'html'; + } + break; + + case T_COMMENT: + case T_DOC_COMMENT: { + $colour = 'comment'; + } + break; + + case T_ABSTRACT: + case T_ARRAY: + case T_AS: + case T_BREAK: + case T_CALLABLE: + case T_CASE: + case T_CATCH: + case T_CLASS: + case T_CLONE: + case T_CONTINUE: + case T_DEFAULT: + case T_ECHO: + case T_ELSE: + case T_ELSEIF: + case T_EMPTY: + case T_ENDDECLARE: + case T_ENDFOR: + case T_ENDFOREACH: + case T_ENDIF: + case T_ENDSWITCH: + case T_ENDWHILE: + case T_EXIT: + case T_EXTENDS: + case T_FINAL: + case T_FOREACH: + case T_FUNCTION: + case T_GLOBAL: + case T_IF: + case T_IMPLEMENTS: + case T_INCLUDE: + case T_INCLUDE_ONCE: + case T_INSTANCEOF: + case T_INSTEADOF: + case T_INTERFACE: + case T_ISSET: + case T_LOGICAL_AND: + case T_LOGICAL_OR: + case T_LOGICAL_XOR: + case T_NAMESPACE: + case T_NEW: + case T_PRIVATE: + case T_PROTECTED: + case T_PUBLIC: + case T_REQUIRE: + case T_REQUIRE_ONCE: + case T_RETURN: + case T_STATIC: + case T_THROW: + case T_TRAIT: + case T_TRY: + case T_UNSET: + case T_USE: + case T_VAR: + case T_WHILE: { + $colour = 'keyword'; + } + break; + + default: { + $colour = 'default'; + } + } + } + + $result[$i] .= sprintf( + '%s', + + $colour, + $line + ); + } + + if (isset($lines[$jj + 1])) { + $result[++$i] = ''; + } + } + } + } + + unset($result[count($result)-1]); + + return $result; + } +} +
    +
    +
    +‰PNG + + IHDRÕŸ‹ÂtEXtSoftwareAdobe ImageReadyqÉe<1¡IDATxÚí}ml\Eº¦W²´^ɺ¶D$|nw'þ ;vÑŽÇ8m0ù˜k¬Q¼¿®·îŸýSû¾§ºúœnŸSõV§;1K½G‰ÛösêÔ©ó>Uo½ÇõTU•1cÆ–YuÖ¼ÅìcÞùa&÷£Â#C,pؚĸ>kÚº Ÿ¶ú–UƒLW +-sÆnÇ3Vq¼ë~Nšþ£ïoÖücèÇøI»~LÅ£{ÿà- ÆúñH8%_èïM²Â£wöB¿â²6EW²Õ,Ä¢p†¼‚¬ÅYþ2+­(Y³ë°ð@ ï±&áóA»/š¶¤Žµ3kXãhàßØ-a荒×AÀÔè<>Pø•Œ'\Á£›JË;(ø}†#›Qz„–ÿ”€‡:4Ãý%m?nf¢ntK*À¯²ælË9JÉØÚ+¡DÞîI§ýYu1Y‘¨¬Z^œ (]YYE­¾f@ìÀâО®lXáîz]‡U×t¥ ¨u¹ ¾&á5-Pš¤íW€}ƒþ@tð‘|Ý#Lõ˜Y’=û´sðŸÈÜ‚¬Æù,w#+¾Rñ”+?‘Æ‹aÖxÑÿ Xé0ø"ea)týGÝ*Ô¡wV®wëV^ªÂrf%xB(qÖ¼¼4>šüWÕG¶#ÝñŽlWU<ÐÌøÑ»XJVѶ·“l÷‹¬Á¾RýÄî$kýDVrÓI¯®£é¤7:ðX%Xà1¾N²ŽEzùºw–Š§;yÒî9ïzÀ9øOÔ%~–ã—~¥áu©ÊÉ—*ú=±ªªÄçIÑx‘cáy}®öY(þ£ëoÖ•u +±N$«^¬jŸþ î®»ÿe\õ‰iXíñœ¬]Ùã;Y-¥r‡ö×ã¬ѲŠ&¾>º!¥zlYÉaVHVNÔ°Ï9=‡‹]Š=‡ý˜°ÇmR¯ÌMÞýŽd»¯OUC ©JUiT}rñW¾¨W'ŸÚ¹uª¸)Ê¢„é÷ËF"YUþ#ðüPã×¾Ÿ„çê&Ü‘íÐ…ÏèÌRåOÀª‹ØwyzÛém$«ª»O²Ñßþs? +^FTÛÁêÝßIEáq÷%¹ó&™›¬‚¨~ç >îMÕÁÇ}]±áÔ–â»wî»A†ï™? +[Ëú÷Nteexnî(å措•Ÿ«BºdÏMTÙªpÊ¥šnqÿqîSé?šøØbW–û¼èXmW6ñÎx*{V_ã»øû©!VÃjΧðsã»VL^jï‘Â… XkÏQj©Uôÿ®Ð6œ×ësk”õÌ©n~ý[üqòǸþ-ÿ¦` ØO‘ É:G¦ôÈë”Ý7â‡ßlµƒ"k¸™ýÇãísRùeŠ2ª®vòQÕ=ÎQƼJÏU­X`¡gžQy~ ÄîKƒ·È°Ü°E°]Ôþ#ðüPã»ç:—t¦Ùd¶\T½/uÇñ÷›Úøãç;þسù:¨JËc-%'¦ eçÿ q“Õ +?j¼"/yh†…¬4Ž¬8¢Zišñ¿ÂùÔÒ1ò|JUÿ§ïuð>¢¾_ÄÿÍNëÌÝ;hxw¿NU ÓJ²QU7\é¹jó©„Ì®bT¢:£¯˜³ÊBá?6ñþ£ëo½J°Â1Ί%ˆóI +UY-IƒïÙi4{„=ŸrǤ7ˆª@)HˆKçJ+†f˜4ÏXþ8C×dÃ?'j؃1ôÅü ’•NÑò×<› 3Ú9üŸ’ÕE<Œw߬†€V‡÷z—E}àý^_e檴 p¥çªt붾3úŠ9«,ãªë?ºø±g’lÍY÷OÖÀ¸<öŒÎxªxÕ|†º’aØŽùªUe—…ªðFõ²Óë‡ ó1Ú;“{ EFÓ0`ÿÆãDÅR‘¦ü+’UÖYiDåÙßÑ4ë?ŠY`|B‡¾s2ÈÜyip›Iÿqã»>WÕoý §Vœ¹áTùüGÛßzg#ø +%–‹ÏD0#Ü 3žª˜[t¦i™Ø¢º( U×,Ä]Î125Ù|îøNÅÌ­fwØ7w³ æšíÆ ø¿u+¾ÂŠÙÂ]¨Dµb]ßÂK¦ œÙxbWê Õ›7|ã•Ð’ú‡Xã•›•®ü{UÝÖljcù™G•ÏôñX‡k¬þ|‹(ÿh)IUÌa)ÿlp 3ùlúîÔuPUü]D’ð—)©/7~4W‰¸t5å¼J}±ûV¿éù +Xõ0«§†zæ ËVM©ÃÆ;>¾GÔ™Õ^è ¯|ø¸gF:Îä£jaZé»ö^)74C#jîwr,еSõlõüGuØ;1éÌvÏm><Ñ)¿}ªò«<½ëðVZ ueÛ DçŸ+jÕy‡–믫J6V{j ý±’K­>´†Z÷ÕáQÕ–ïý·&þmZ:ž–¾1ïU¡MBå~¢åò +ÆaíÀƒ:ä/᜗:KÿWžWOÒ &…­ŸªºY´ª®2fìùñ7cÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘±åg¥È*3fìF5ÝLb´‘¥NŽÁ2#Tf=Cé`!–üZG¯Ue꣇‡e‚Å2VéÏ<œ1mkS¤ÉåÅ4iÏ—*.š{Nü8X™aj~ŽéïÚ€ânAšx,ÿ—×%fE:Ã|éY˜DV÷j +žë¬Â¢Úlg6Â(:«k~Œ¥÷MöMâ×5?¦4 ]WO·>ºø诋W¥È£—Z”iGü|˜QËGüJe´çK[YcÕµ¹pmjE\f/¾ÇŽ8&¼OQÿ3Í ‹âœöý.3t¹êt2'½-Và8ßùá…pƒXµS°rÇY#J!«ûñQð¸ê ƒ"¤,ub×@F­³úKß:¾uÜ^íùiy©ª[]<.Cw¯‹ƒ¯+W\)¿ïb¼ª +k¯r-¡åƒî.M¢t¤Ú€ÔM¨‘qÆÊ„õÀ²þÓÛ°§·¦#$^X$žÑ"œ§‰½»ñV`•TŠ4™máÒ~÷w%Pµp1·š|…+&UxÔY‰Š8«Å*Âr²8:£ìæ¬ôàk7QЃҀTªºëâ“Êú¸ð“Ö$ˆÛÐŽõÎÆ™¿ +S>~§Sü®õµ„jÌsá­:5Þq.w°&_Z.ôX=•ª‰ü:Þˆbwë`”ÁÒ _àkd‚{'¢Ê0Û:ØdÇÜsÔþ#ð«q«¾i!224Óö•ünq‰\’9„-‘ªKUTäsSU½ìuVo•@;¼U®³zÛ>^ú¡=¼—N²Ûö•ªîúp¼¼>oõ…PÁ¿O…ÇÚ + @Iûêú@à£×'G“j5©o¯*U®>îä^«*‘e›w‹ä>ͫʧ‡×á« Q°†”5 Í„¯Êç†<$ç#ž5¶JÒÙ»ñ¨jÒö6eî)ðÛ_ ýîùûd]±Ó2‚°–B:À‡ª^ò(*²:8JÊÁÑYÕS鬆®òÒïKÝ—“è ]U4_Ærj¤{Üõá5’ׇãaÇ‘/íyó—Vÿ?“ìG¿tÿäG¿¬Ôõ‰b@xPUŸä7O3§|ªéª ÿI°òQ5ÎÝQü³GwÄ *(;³w¢f·0*×PðUU<Y¤Æ”ˆÿñ¶v†²¼þb¡ÎtÂö5{2!ë,}©Š½ìÒ¦–”:)·Îj2Ok™Îª’' ÖŠ0I.q\(Ä%ojQ˦âÄ–Õ‡ãa<ê¶ëÔ‹”exÜAgt‹û'£[d;׸Ûù«ªú`rÈcd»ìž¦–j ŠP¹FUÝ$”UeJ½I6ÙTü³É&Z}ªªîz¿Þõ(•z÷ vfu¨zÏ ¿›{}Û¿ßÑåÝžlx“ÎUõZï謊Ç.×Y岟bÌÎç%»†Ž—¨nwÀ·@×Ç©¿¸S9ÞÖ|źs%Ú>Ë_õo#§üž9Ø\¤EU~ÿ/ÝÚ÷t(r[½QµªZu™ûOo;°ŸËèÛ!MrU»]ÛÎ0TÓêcpDÅ‘Õ?.¬õÚcÎêPuí±Íç¬F€²€™û²;œ¼ªŠL_¹©ª«³ŠùSÞÓb}¸R/ŒJ_Ëç+ßÔh¥2$õaµ£i ­UÕÇ©¿¸S9>¿Ð„}7ª6rÊ©µzuùÞíùà~国4­ýoĨ +1Jœ­€Ñ +µŒ^±Ì˜ãÀ~££iCÞ¸5Àÿ5G×¹]úg…þõwö¼sùn zTuO=Š?/“ÓÛýzƲc>ÚþΟb¶#7Ö»cg’æk¿þÞ›TU—j÷©*-T=]Ýúèãuu}¯£>ݨÚNЭ Ùø[ ]â”:%/_› ®ëS÷z]6D.Ôm®‡ƒ¬ÄìD7UÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘1cæú£ì´>ÞJ4hëPP…®+«§A›;'G_®XK¡ÚmL«…˜5I.},wFFu§Þm$S–-¥E-;Õ +C3I-`ÏBëßRÕx1¾ˆÒ“T±JÝ•;hΊœ8£ DêYøªJ‚o;´çÀþÞÙYš5ŒM²ÍçäK·¬É°Mµ;šª¾%Pº”Žd9Kîh”ø€nç´D[z¯ÅgVhè,®¥'Cº +p!^MÖ(³WK2ªX¥>UQ‚Ä%âö°^ƒ›p8 ˽Ö^#Ζ؄+.@—ÔñgêCêz%É”-Pr +–‚¸K¿Xÿˆ +¼…‚¦nÓÁ·>½»×=‹Õ”ÞѨðÅeSvR—×£’L—zªò½Ö5%9UQS ¢¡\ŒW‘Õ«ÙÊKÕö'Üh™p)ô +J·”r˜h¡ß žîM0ÊF ¢Î(f_¤R5ñ/É//§Gïä+óª‹õþ£±¶x 1"è¿þ³¨eSðú 5… +­Ö:Tõöf¾ð=+Š7ÉQɧ§\Œ—“µ²TE¢¡ §sü༬ïrÆßÞY®s8ú•&†kíìùû¶ÿ­ª#pSÕŠ5Mà³Tªb«ªDÜŠ[Ng¡5QÒ\sÇí5PB@[ñ8ɨ‘V1ªª¢¤¯¬&ö¦4Wsy[šÇ¾ +ŸwÒU€½ñ2²V–ª¶îì7ÁÂ7”€jïÄÔÐÔÐÞ‰d^~Yf·íC©«_‚Àh;a.ÌÇê&†M® +i §ÂU–ªººªWpzs`>÷/Ö"¤Ô'OòIöáÚÛ²ç‹y‰Š›€¬:ÏBzdõÃû“µòTôŸq£ï=йŠ­b:…‚°"ü½ºùm«/¾Ñ-/PÜ÷WÁDQóÇ´Íâÿ5Éîþ7Ÿªºúªúmå`ôHý¥%AÚóVµÒ!ÉH¼Ô›×¿¥µ÷@"Q£¶zãÅÞ‹|ëß’TÖ¿þ-ï³*OUý^ºûÒ¦6üº©­û!Èî‹Cw„kÑ|h¢&Hd5ŽLEYày‘Ž'ÙÆ£7Ÿª%½*Ó{èü=)­°ÆZ¯%Ù¿§P »Œú*GÕæÜ]ëÀ•È/—¸8LÔÍwº$?8üñM¹)\į«ä£µ/#ª7U‡fd7'6´\h1ï +vI’f”EIr˜˜Ç=½1øwöÜ\òWKÖžVZÄHKüœgþZ‰ƒÍ¡$m¤äx·‹ÉÒ %œË Ý`j}ÔTuTöQJZ¯è*H>*QÝxkLFT¿ÀïÞy†“UÕÅ¡-†)‘ôb¾®iA¨Ùó|q`Á¿F­'ÁŸÔ+ ˜áç4^Q¶y ´x‹ÎH)’î#Ät^­•?@]^`AÕRêSŠªq¨jgžB:ÅrK÷Û·l<2ï-4¿YŠçKâhgQ°®öLÓÄxœV§wÞP¶ì~ÑÉM õΦ¾‘¸0l 3šÆ…ÖaÅŠITˆÈ€hwJ¬m¼¨¬èÁ¨­™xIM¤Õ¹¥¸|«U7xˆS½³~2ß•?ŠkW1k¥ü½C3]Ùã;Y­•nSÞ—ºÒ‘AíeºXÊYzø8,'‚x‰< k7Kx‘ƒÞÂ]Öù$³¥x¾$Žvë´g˜T#wû“;oðÉýòÂ@ Èz¡_VÐÚ÷mán|¢HÖµïËhåØZg-^TAn«¯-‡ )ƒà–¯@4[*Ô9xKãÅÆ‹çÖÁ²²j>Å!,¬VtË:eù°Ô—Âqn8%oh²ÊéS„(2è\Q‡Ë^éaigéáñí¸F—¸3€³v³TUDV¸l’QÈê…§¬W¥cÝí%’UàåªeŽq©4ŸÒº/í¾U¾ ¥$†_æŸQ!Âä´>¼µøÉÕt×|é ×,È›G<tßC÷¥Á[ÔxTXmf|ì·<©ÄOÚ¡¯MTÙ|(w:ÌÜã_XÚ¤Óþj7w°´³tñ¼å » +AXßͦªpÙ$‰^xZ«R±îö¤‘ÕÁëj¬x”îæÖ`ð3=â^±ñll±+Ë—e»QâÙ8g8V ‡‘+þ9MËïë/£ªÀž–oè14snb› ¡ëtXÙÜÛsŠýÉü×vEÀl+@\Œ’e¸,å,·cÑ®â<§(†ÂiõHVYªr—¥Qà O7£aÝíI©‘>Q%dÕ#jUÕ†³|; H¯Ø[bÈÂÁî¹Î¬Ç#ÊÊÆá¡«ó,Wés7NT1~ÝÔém&Ç»²{' \­–㟾· ’bíBKJ¾o8å%·!˜…€$•ªQ—›¨Ïj:©‡/¦RX)$SyªÞ³ ä§ëR°…DUg_Dûƒè»¦ÆJÏ\Ñý굪jßN®¨Ö–SU;~·?¶÷O‰¼h˜ssýdáõÆ£}“6Î(T <ÍÕ_ž4ÉïÜb5øõÔÖ £^N ªöøNŒ%8QejF¼7toç¤îMyÛÓ©ê`)g[§‡/¦ÒÐÌÇ÷Ü|ªºïÁ?òÆÓ©JÁæåuÜG§ºýãLïå•ŽÞ/=£CTÜ hdÊifHºÔøcÇžùæÙâG4öŒ,¼îøóáõŽ²`’DÕžÃ{'xý£ÊG_p/5øâ‰@m +×$jVÔH¨¼Š3Õa"…*Å©,å,¡ûH¿JÒµ¯ȸ…T^Qyª¢o&IÉžJUVwW§ýÃLçeM¸ø~ñ×3t¢¢½“²»A©ã6ôÎÚÁrÌÝwɤÊ6œ²Õ¿í¿ Ðò\0HÀL%LªX5ê’c¨¡Æç“@ HHÃZ‹º|NVÜË+7WM«Ã{ü­¦¨cigéâ…à*¼Îê¤È¸UšªÜ7iÉž«Ð±zŠˆúdõ *Ì ?¯gtäÇXõ‘í8îõÌO©°XÍî°:ïô]2üÉ]Ùp^°¸++òÇ>Áø¸A”èÛVÚ›Eí{âæá “´DB.È&¨/ÅÒÎÒÃã56Ÿƒ©AãrxY#Ü•÷yá)ô£cKQtȪó²¦à~­Îð¶ÿ­êõŒÇÅ! ì™;¶C}ʃîÈtf{æ6Ÿƒ$N§üVsj þ¹wup˜Z)zÅý|ú-”wìg+nÞMVjÆ/d+U½°”³Ê~ͯÄÛêŲi—ó:_ixš£ wµêhqŸƒr>©é§ƒ-Íx«ë¼¬)ºßÝ·ÚyÐÆR=! ì–ÓÈì:øŠJ/lÌÊIk‡ÔÃV@¹nåÝ7ï475ãç8«ZõØ KÑJæ(þœUxšzñ1w)^ê \ŸÔ£žözȪ󲦨c‚¨©2fÌØèvª+‡6f̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘±2›®Nï÷ oŸC–\žõ¯¸ F1Ö´Ø ¨UZ÷JVÌš\®4ÍéôÆM§÷û†gq1z{&³YúT +£,ðHX~D­ uÁ\Ágô÷}xþ>½+Y±ÀèdNÞÌ®†ïo‘l ¸Z´X+F¥Ó[ž/jÃÿ+S~2/jVîò¹8óJ»r^­Ûïè³Ô‰]J}JÅï é*Û<£í2Ô°&£JÝ£ë¥jOµöM@âѯ#0àà¥Oß[‰úS‰Ê÷·°‡†XÓB^ uzùe…\§×Á»]…ïýd®ßüd.°¥—/„ ÔxXE +¢f'vÑëO»_´¦“‹HŠ${è%;•kçt7Þßm¼ƒÅ‘|òúd{a¡ÞŠµ^£Ô…Ç›¢ÚŽE§†5Ê‹¦ÑBr]W·ú¬=¨_¹šÑÃSA¼»†f(ø0 …ÙoU×5Çq ,ë_\×lÿuz˪uz¼û㻲¸ö×oâš=Yiå÷Î~|§ˆ +0+¬=VŒÕòµö”ò…¨J—ت ³Ý/²›Þ½ÔzMÖÐ\÷zCåLÃÿ±Ã[Uõ:|k*^8"¶\WÙš\ .¨ïXTjX5 ÎSk½F‹u\”1çƒ ­ž—q'Žöm¿Ä£/ñQ¿”UØ•£*«AɽDNZ×®?_¨[#Œ Ë4þ:½^j|Â5LÊGù­ ||©­ÂøÂBW{6[uQF©¿¸µ.1Š´$qFÈí9´Ç‡IHg)\÷˜ÕÍàž5°ê>CÃ#ÇÃuöXÜZ¡é$Ÿ#*<Èß«sRÉv¹1Tj>J¸ºm>*§«ãÆ#‰¢(®é +Éé[F¦hÄsשõ5õÕ*jQʼ–&š†è&×ý&Pêˆã»çŠ›L®Ó[ÞQ”áª1*üÔ«‡ ¯š;¤Ÿ´X}ÓI•Î°À[Q„?Þq¨Q½Z Hèóûä÷Ý™•ÕñÖžV¶ŠEsB’¼CÔZ9¾éJTK¶Ë «¢—ÛtuŠp¡«Ë·ºê /©Oïì±´,.k¡Ud‰sƒOHMg4=-)ï+Ø¿èý“h2Á¹N¯ƒw÷/r|WÖQn=·GIUù;“˜'ª„j,¬ÔvðîfñdzþÏí™p¿e¬¨ú$õàºÇV GTYñsBZÄO‡1pçj:ü˜›¨rü±Ž"n©TUSCgœœr Çve§†¤AìÛ˜±™Â˜FèC+Õ–#‹[J–¸òTeý'v9-Ô3 Dîm¨Ó»Ôuýuz¼û㶘?ÎÝ0»• ”oËÿ÷ ¢ÒêãhÕxð«u‰YõÐ &“·î§‹»_”54×=fµÐÀ07‡ÿkלUÕð0‡·]D:Ôøæ‚ä‡Ïj±dwÐ/+žÚP¨¡GUVóäSŽç<ù”\2¨u¦»at´cÕ^zYÜR²Ä…mCÔ+ÔÒ7´¼þ¼#‹ã,|ú:½Åi™N¯ƒw÷º*|^sàÜmå|”X>Ъ^ýÝ1\—#ÁÓ͹” &˜¤%§{,2À¸Uˆª>ˆÝŽ.c05zØ#ª +oëg…öNà£×O+©©QÊì“­’ï ‚®•¢óÅ,ÎÌË—Å-%K\ù´Òî[S_`ýyŠ«+›úb÷­¹_9Šë4ÞÒð"£U©ò+‡çÎŽap’}²I­¸èè[óM,Bª.ÞNtñœàÇwªH—Ûj”漬…ü¬E‰ ºïœú…žLÒÍ߀ 0DX(©kÚµ§¶¸” …NoU§÷{†gquz +RèwkÕ§Rx'ÖuZà[šóÙÞ3'Ÿ¥zÝyy²¸×“%®ûsŸ½¦ÿ Æ•úàü3jYF\ÙÚs¸â÷=m1ª&ÔúŒVÙ•ÂAɼ?k\+]Æ6yïモ¾»1ŠÃêgtÝOIW7öaïl|1«ì­É è©õÎÆ>$]e 7ÈÚØ¿W¯I¼e?Þ¦ÑL#•àÿ>|Çÿ½ó +íÒ­±´]ÚÒ +p±M5M­UdIú² 61íýÔ ûeǼY½Gððþî»híO n‡Ô3çÕ­R:^×k_'Yuuq#ìáçpõ# +âJ¿‡Ÿ‹¨2Öx¥™ñël>×ÿOjª®ÙÌõØcY²é¦ƒ¬!•Ú¡+ðsZ/üíìÞ× D‘}Ïá2ž AƒY m™”®ˆp®c#Æ<'x»ÏSKx–Ÿ`å¦*W[,e|‘6â·BÿH)㶤kj•ÈÙp™»D¾U(2qzx‡¨9éÕÒÉ*tqa™/,ê + Z[¿¯ 0Ï>ýìÓ¨§ÖœóŒ…xN)fïăûÃ@qÕ¨‡ÍÑþFUÕ¿—w(·¸a;Ë‹ð>Ò|T†c|Ôw2 Æ÷µeiT]*æ!_\•WG{ + §è]¬^ÐÛÝ…ßÉZ5ÌÔí¸t|‘6ÎoYHÈÎÈëßa齿¬ÛþþO@¿=í«„¸Ä my^ak俺¸ñEü.¾¨ÒÅuô‹îzà®]#Ù¥¹ hWvü(ëî:Ô,•ã6ÉõA“ë߉JçÂïFaœâÞ\ â‚w©øW×ô¦ex>v¡<çë?|ý‡¶Ô&i_¾q†zë Ïð”É] e²R_Ä7©|& c*kÖ€4fÔñÈ,J «U—øÜ_Äh“ø\1A¤„îîèù•¿ùµ¥÷ºu\·ý-‰L\Ïœ^çê~ÔP¹hrÃÉ*tqa0¯ƒfTêâ:ßMUùÅ;qÔ>µet‹u¹MÙÏYÃÖA>†Ž€á«þ).,ù ;ɦïCÚbwÛjE)øÔW°â¾ÅÏ …ÆFÓ«@þs4¢e¢6^äµQ9oI}4Èx<û“Õ.ÕB?¢–BÕÂß«ë#ˆš$‘åHxì.x9,•Ìa!®RTèpgd5ºÿ‰¥÷úxB·ýeŠŽü².L7@¥*ïž +AsduttSëâVUaà‹RU|–I xG¶߃$T®üÃëýñ­Ÿ¬›Âë#_œùIF÷MÂŒö_Xõ@fõo÷ÙÂQ°IDÍúI²¾I?|÷%Ž¿÷¥$Ûrê ¥ž¹{œŸ‰ôÌEÔÛNĸÜwÞ•ó²qqé?ÕíéâDؽ}­}o•/`Ó£ªCT±i ¬ñÈ/§ywãOº §rD 9©ï—YUD]êà˜ Î‰Ãú¤¢@sÊåè]ÙÁ¿+'UaL}Ûû hƒšrÌU±Ýßç'7º:ººsU|k)Hú€@§ôáˆñhßN¾qž#è›ÏµÁ8Œïy­Ë­àX²ÇÏű#ö¶wýÙ +´1!•í‰ÆR'7âçfÈuãד»²0Šù¾¿Ýp¤!WˆºÃ–W+NmÙp¶\£ª š-‡ioD$Ï£ãògúÙ Ë…%%ï¼ÃømÊíV€]”̱œ™ráw*²ÊZÞ}¿ùy›+L» +N¾äoçu©jÚ}Îxt‡ô•“¢ƒ)lSŸïtuqõ¨Úx±ûÒém NyKÌUª OnDbƒhf}ëk¼>Î6ÞuÀfTï%þøÃÀ{‡ö¦ <ñ®¸’úÛmj¼¤FÍcÂmU¾ï«ì¡ùcßò;°wŠí8ž‚@dG¹FUAµü&©‚ ÉçêÑË=nðqÕ5]iP¼ˆù}§zê:¹k⼶‘Ý-¼ÄÊ“» Κl*'U›zãax«W…µÔFÖdZº¸zTí¾NR“s+’ˆ#«ùø wÎÀzgi:·°MB„Àqø¿žtúMÐ ül#¨^Ö'G™ß£Œ*^ÚtÛ{œØÕ=§rEý¹êR“ºnQù$adJlÄ02%Ÿ®TÚŠ^Š„ÔÝ<Ó~g§?ÖOóf*U×^óÆ?üœ:¬½N¢Šž”®+›o¶[àP¾UÒs’|çQ“»R']çVó-L)H K¿äž mYËÕnµ\±¿4}Y©ëVÓD½ ÎhÉÍøRð©ºê;g¢Õ-©û'…3aסæM¨ D­h£}´1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒýÿk¸*Èš4í`Læ$bÙ ªòœÖUêì²ë4\dtœ×Ö'žÿ®>…HÈ„|Õ.–Ü+Y+/‡GçyšÎó2ÅOCWvþÓò¹3v,«'kiaåÏÊØÈ ­ô¥W³¿‰Œ O6߯Eô=Hv +$L°l¹xI¾èº/†˜}Š^]èÚøÑÓxŒ™\3Ôè æÉ®5¯ç °¤ÿQÑT&Gç9AÔy^Žø¶¯úÿiä•}OÜó[5Þ±Æwq¥4,s JJ×ÖI.myEÔ^ë%ˆÍ–'VñB~½dׯ‰Î}ã*þj÷­*‡ ~™ÈuÁTå®k†õ¡\f†KЬÌ*¶®Y]›ÀóÙ_v'IÙÖ˨æºáëöé‘©6ÒXš—oÿç'Ÿj&uÍìɧnÿgúèT]oíò„ÚŒþÆ9”«©ó\*¾wVHÓ–¿|Ì Å>Œþ:ò5EFø'J ¿‰ËýÉ`î¶Ä©!ëòA¦¯˜ØÃê® É +ÄÙçe~ÀÇ_;ªÌð5çױϊ©ûŒà¸é•‹m_&þO÷¿Æ«ViÚÅÝë<}"«éºð°hW9ÖX±6öÐKPÆ£ G…"ëÆ­£?¹ó/Á÷”åO¯^Ø÷ëhC¦HáØÐLû¬cß«¬iÂÌP¥ªjßãÿ)}ûûÐQQÕ¦‰#tM§g¾°9ÿ ÆÔxGw—‚ïÊÙ~d;_åJ+ßRỲ¸<üõë;¶e¢ŒÛ ÞÂ5/Qs¥/5º²N[òÉ!´a+„N‰PÏb+üѺ’éIÆ}´ûÒà-ƒ·t_âq“U=–MKÜÊžÙYÇÜþ5nožá*ÊÇÚîv—Þv·bŽÊŠ{]¸â¤|” ~ Z¨{-èÿˆú¾¸ë‡^ˆý›ÿFVviϵ3™YaÙÒü˜ô«=6nŒ­ødS;œ-ŸÍ´^;°uꪪ^ þ|ð¿=úó_Èw+°ú"‹ŽøÊàiÝ&4¡ól“#´w‚“iíûr|W–ô‡œ3Uø$Ûý"Jì~‘ŠçO@]~tÎâRJV³©MH¿w:̦“¼ìÕ@?ÿþ>ëO¥Ëé?èvdrº²tS§*$í&~1>‰ÚÀ¨«äÖÝZ}^ùnÍL(ôÆ]Âf*ª&ž*èQž’aßIÊÇðÐê„|”Œ3Ô*°—‹÷O¢ê?ª¬úç‘Áÿrÿ?¶*ñ¶³4ˆGyz[äk/täk—‚Q–ÏÏ–µÏöWC¿CÙKºk/Ýúx§¼5×|ùäSÎ*`’ÏϹγ˜Q±ÜÂâ¦E¾w”›œy’ +o ‘ØK«YqTøbªúãß$ÙÎóÏ-/PtªsZNî›KÎÛQ¾¹*>§‰Ý¢ì‰ÝåU™@»Ð"JQ;¢ÄϹ&¼ +ŠLxÒ;+Tã /+¿ôÚOÝ赟ÊÃ>è» (T²›þ?Ä·D^N*©'Âpöï·öþ$I¤¶õWÖõÔW~Ó =üæJ|ÐÔ_‰óUTeÁÄ7Ö°P`ÿ;CYjkà=ßsßU[«åmß™-¼úÆ;°};³2|÷¥w¶€o«1ƒp‘0‚Æ~>†ð0Ûßõm·õ +@JïrÇŸócÙ·4¢ÍœØâ?qÅ÷\ÕUUéIV?2…åL©‚/Æ+Шꄾ< ½Ü‡^TõÛÛ ¥?t©j\ÐJr£¸ÜҀܧ˜B*Á˜³þŽ=kÿmü¨ ¿þXï,n}a¿Þ©¬Õ’¹Iaù¡dìp×·öãlñl{\ïú6v8”¤Rµªê…Ÿº·­²Ò²™ä¹f¥1¹ÝF|ÕÂ;äeó=\DÂß ,D¥:ψ¢rñ˜xQTâ—Ž’*|{n¶‰S +9~à=ü}Ó•¾ÉG~%jû:D…©j­<Óáž«:£ªjO%Œþð +ï$T8!jÿìÓÛvmÛå|'O¤‰Ð—‡Á¹➱z\vsIv`ÿÈ”¨Ê¨jµ-¡^›$-€Î^¬ èG Q¯¡{ÛmŸ¥¾`ÒTûš#Ûc‹Öž­ã¸Ÿ|nâ.ߪNŽ$Þ÷O ÇÖÄûÉ«šJUV¿áìʼ›t,ßéÝýâjÆg¶-÷…þûmï­ðNV¶£ó „zÌþ:ÏŸÀ—(ÓΙ*|1UÕx=Y±Ök*üƒûùt« ÎM³þÏ÷NÈåNÝDUÏhK™«ò ØžX(刄Rvñ!±#B_—«c¿xï€R§·Ź‰Œªo¶E5Dg>?úf›¤©XQ‡¨QéË”|@‹"ÓÕ¡M‘—£ìÈveC×>ôÒm×O$HãÞ#]Y”µ ®I=ÜÁŽ)_Àëë`©‡ƒkø©¦* +’:aØ>!X³çË!›ªWÖ^Ýô†wÒ’œ¶l'è<;øvwgIÀÓt¤_Û?Jh”Ÿ`ƒ#E:fdx=¢–6Wu<ƒ†ÒÒöÌÛÓ‹âd2¦di¾×ŸË‚Œc#h¬c4íßûÔ?<´çÐHº¤à»FYo´ûVp¿Nñž;„Ý·J\ûÀ ö¶‰Ïÿ>„` (Šˆét¸3{Û>⦊Áã;;q†ºF±‰‡xÝ4Yc«ã‰µS¿$w¿. ½……—dÝÐa*k£«ó|£ðQÕ,¿í+xñ’¹ýs^¨Kß«ÒæªüP^Üéîn€OÖ®L5m­IÛwl?-.ʲÓÛÒ÷J8 §FÔÃê…Õ ýB.-:2…ÀÈ”Ý!ÐÎêÌ/AÊ#bÕÛ_m%ÌIÄ(œ”â$|¼PZ[¯÷¥ 1½G¬{^ç#µ®òòÄo>×3×õmèw?'Çcx¬£·[ü^•:W•k/—`'=ÿ°Ð~Ö¥ÆêúWÒ(õgQ¶ªbfv7UŽzÉèMþ3µ‘©Æ+Ø‘Kç:ÏÑ4|GñCtªùAË+Kôÿʨú{@©ÊÐÆ– ±[0ø5íðý±ÿE›|yn4MIEND®B`‚‰PNG + + IHDRÕŸ˜Ó³{ÙPLTEÿÿÿùùùÿÿÿÿÿÿýýýmmmÿÿÿÿÿÿÿÿÿÿÿÿðððþþþöööüüüÿÿÿÿÿÿÚÚÚÂÂÂôôôÿÿÿÿÿÿôôô÷÷÷ÿÿÿ³³³ýýýâââ°°°ÿÿÿÿÿÿûûûçççþþþÿÿÿíííÏÏÏýýýöööíííûûûçççúúúááá’’’þþþþþþÁÁÁ˜˜˜tttáááÐÐÐóóó»»»¡¡¡€€€ýýýÔÔÔbbbÿÿÿÕÕÕøøøÜÜÜúúúûûûéééûûûýýýýýýÑÑÑòòòüüüøøøëëëüüü¶¶¶ÆÆÆåååîîîõõõýýýeeegggðð𶶶ààà÷÷÷úúúéééåååúúúøøøËËËÿÿÿ„„„ñññxxx÷÷÷ÝÝÝùùùÈÈÈÒÒÒìììúúúÞÞÞâââæææóóó›››¨¨¨¥¥¥ÜÜÜîîîÿÿÿñññÉÉÉðððÿÿÿÿÿÿÞÞÞÆÆƼ¼¼ëëëÖÖÖÐÐÐâââùùùôôôâââìììõõõ´´´ÿÿÿýýýûûûüüüúúúæææäääüüü÷÷÷°°°™™™ýýýìììüüüÁÁÁéééÿÿÿÚÚÚððððððõõõñññþþþøøøþþþŽŽŽâââûûûùùùÜÜÜÿÿÿòòòúúúŸŸŸííí÷÷÷öööèèèóóóúúúõõõõõõ¦¦¦ËËËúúúøøøÓÓÓëëëúúúëë몪ªóóóííí¢¢¢ÏÏÏÚÚÚÖÖÖ¢¢¢ëëëâââùùùUUUÍÍÍÿÿÿÖÖÖãããáááêêêüüüÿÿÿöööûûûóóóôôôÌÌÌÿÿÿÿÿÿùùùõõõÿÿÿòòòýýýÙÙÙüüüûûûüüüééé¿¿¿ûûûêêêéééþþþÿÿÿørOæòtRNSÔÏñ#ïŸ_ +/©ðÆâ¿oS·ß?†ÅCá kD¯ÂÀOS_ ¥š²ŒÓ6Ðà>4!~a §@1Ñ_'oÄn¢Ò‹‘€M†¡“3±BQj™¶p&%!lµÃ"Xqr;€— A[‚<`‰am}4…3/0Iˆ¨PCM!6(*gK&YQ¦GDP,å`’{VP¤-êxÁ)hÝ7‡e1]ôˆßW¿³$—‡1ƒbÄzSÜ•cOÙÍ]ÀŠ–U;Zié»'yÜ"€âÐБÝ؆‰K 64ÖYœ*.vè@²¸îŽc.};‡ïŸtN%¨DIª˜ÊÐ !Z¶Ð5LñH£2Ú6 ŒƒÉ¯ŽÖ"Š Ô-b±E,,)ÊÀ BŒ·¦>m¹ªÃãúnøö6pmŸRöO +wm@°ÝÌVÝ#?É'C…È‘Z#©Žqž‡ìÀbÒÓ|$½:Ü)‰Â/E¾%÷ânR¹q—CàhnµÉ%õiÓÌ“­º¶¶ß}lƒm +?iÿdâdÃ"€,Ø­Ç`¬Hñ"r.z¡¼‹ŽÁ~ýìü(bðQÜU&ê½—)–5õêX#•§ òé™EMªæÜR<Í*p[€[%.©OÉÌ£˜¥k7“lIo°ý¨ý“¶ßJ°F  ¥lV!̡ăuH‚`Ƽ™€—›ç‚&¢,Çz´ÉRk$¤ò¨|$ölŠ»¼Xbü¢âéÇjߪÈdU±û?Σ$Hµî¸©W±¾$Uû'…ÆÅHÜE3*Õ­º€µµU\}ê­ý†(Ò +¤zhVk}gÇu«Rk$¤ò%¨|‰T¨|Úêck¦ç³"ãžä±Dç”ý«ƒ_W+‹®”Ê.QòÒÅ)Õ@«ý“ƽ€H¢À›Íbµs¸ÔlžŽT´©·Dÿô­RÄ2Xm£#a Ýêº3lYÃÎzÌj¹ŽÔã’š#!Þ 4þJ´Ä8Ñ(Œòcµv™‰¾t]­a·˜T™Çàø Ò÷D Î…à¼áQ?^-‹Õ_^$:\ÿìÞV  $«•N|ì=(vˆZ'q6¹Zð׆‡×üB5VìÌî!y†´¼3äßKœÿ㱿bàv4Œñxðëê£âR]al—í!ÔþIÛo‡P‰@Åt¥äVy”ºîàLïÿÙªmlµÚ¿I¨Ub|[*°¶lke'*¾WdîÀÝdà³ðïD·Ó}\W›ƒ_Wß´ù¶¤rÐNÚ?™øÛvÞ«ÁÛ²X%§Ž0u‡öoui*„üJV·€Æ¦‡b%†}ôãˆi5I¥YlNŸE-wÐÏ‚ûf_W3mþIåà…Äý“…—-ŒmƒÊ¬²Q)“S µÖk´«TC7êím¤<"ÄôÜŒ‡b‹T|ìÆ'¦Õ$µÒ˜Ÿ£óóÖR&>¥êO pœõºš¾ù…ê6ݬÒöçú½t±¨î¥S­ŽN\©×¯LŒîmÕø\ÈÎÑÊÄr@¦3žuT +b7úÓt.5.q©ôÈ3²r0ü=™8T¿ªi­J©\ëÈ6uF +”²R¸32^÷íñ'ŪŠóÀí±xˆâI« ïÒF„8O{%8­žkJšÓMSÈ´dâBEdæÑè ïW‚CYÃ÷O:/OŒN/—I‹ê_=½€xFE”Ñ! Í=¥æi:oÁ~’¡· yþ?¶š'·š'·š[Í“[Í“[Í“[Í“[Í­–è».¹U>±$÷P–ƦŠc%†] Û\c©´:é| ý,e¯SœZ,‘oš¿XríäÎËXº!ëRæ”ÇÆò@áZøv‚ ‡0Ôç>?Á*ç® Ô<ðþÕ|ø«¼N6þ0ú¹;{¯ažd³ê2Ôév+Däó^tààúÑ[q!òÛžV}Èøf«œÛ¨ÏŽÎ×Yÿêeॗ€Ë)Vyl|" f÷UDzqˆ@ëˆÇ¼˜4Y-˜³YýÍ-!¶6a“žŠB:o%ñJ¤ÛI±´—UQ|£UÆK¨O `¢®=\ ý´­ò:ë0¾°Àx …±Paó‰Ìuˆ@œ»!ç»K†âPÏdÕxhw1>×$jγ“vöZdàè™xñ«ÕSšUAÅ&[URßd•ý7ðøÂz·ký«/˜œðr¢U^¬Žä £ó—w:I.àVÇ®ëôÿc>qî„œí.!·zSÛr&«³Õ2…)Wgù ¾…R -ÎiãQ 8¿çØûPa\О×U%•iÝ¡¦þUï_=àÃpÊø ›Lu ê(îžN¹?†Ÿ 0?Æ:]½Î¬ä†ÔÏt¬B%“U|™úù²¡NsorNÿ¹f¶ú ø,»P !­v" +Y¬6¼hLï_­@@…bé·s¯c¶¬£qg˜v4|Â|0lÏŸÐëÔ$SŒõ9ŽîòbʱšÑj#ŽŸ£~žƒÁÒÏ?o²÷}‘‘ƒð}7sAPm:IV¹=n•÷¯ +!ôþÕ{±›{ÍÝh¼ÎEࢪ£8¤sèu€ÍoL®ëÈTð$ñ„õ;VÝú¹­sõöcqìD¦3ðø¸ñ üÛ༂3.D«Bˆ«éý«³B4Ì&ìV'ØÜ TÅ `õà½Dï6ÿ™žšÏ·óqýyùjû8V‰Õæ*ëÖíX%ý³›@s«\ÞjrNµ$à|ö=5þΆ 'ìmU«iý«Kýi€%C™ÉIð:ssaÆ…`*`óµ=úl½÷)>ÈuÕ˜MeuSš›·¨Iò_ÎO÷ˆLü£_©}o&©íÀjzÿêÝpèºþ{¨¤ÖáÜlu:OñÁ®«ÆÌ)«s¤%Q@ãÍ$Þ<]f› € xO%…÷PCbhr2£ÕôþÕ¼ŸèýPK·Êëpžf5½Në3^o«ù©ú¼]êe²JÊêÁ¤iÐB˜œ464†€^tï‡uÙ²þUÖŒ:G4'¿ò22YêpÎëˆÌu¦G'/PyÙ4?¡þè.ÕæSB„P_>‘ÑëšI 1t3Γ÷BäÉ­æÉ­æÉ­æÉ­æVóäVóäVóäVóäVs«æÃ]î³!×67(ªÇg ¯¤¥‹Šyƒ°@†” 4>QÚò ßÕV«F­}^XׇìÚ¼ˆ’Õjµ¦e÷26 Lž³Ð%žòY´Gâh û³šl‰C­}­)Óâ< +ˆ!ÚE ôðÇE½PçZWZ™½ŒV+þ@†ÏR 5{@ou—Ɇ4²‚²&…„˜´H…Ѭ6÷eµy V‹ˆÝ€˜VÅ¥ÖÁ¬¾ácqZ„Þ’©rìÓJÆçyBêæyžÓˆFzÑõFN¢$¢HbÈÈÕ³*+jÕqòÑÎÀ Ú«˜kÝ¿UàX„¯lºe·ìÄö¾Ä1“ÕÊÚdà0d^õ-‘B%‰ƒ}ê œø¸{Yõ¡™%rÇ*Òj5Ak5¦u«³"Ì,·:~éÒ¸áY¾Ü~ +h™÷ûÄSA~¿­6ì ¼fuÁlÕ‡fµŠ{ȵQtATHÐZˆkÀªŠÆ­/_°¸ÕSŸî¼náû¹ +±u']bù]|m`«B…ñÄÁÏÀ¡J,O$íÁdu]·Zs® ÀFLß:©Äùúú›aõø‹À‹Ç™ÕÂÌT4Ïoà~by?wpÇj滥ÖAœ…Ø(€xù]„†¦ú…ªfÕí¶~anÖ§/ž©¸¿^ÈdÕÚ²öcØÚú˜Õ‡,!ÄÐ1©øi&–xi_VK@ip«Íƒ9¯ÐÞVi%a; Õ¯L?‰0J“*¹’šÅª5ܶ¸UÑ·Š“'Á¬ºx^î²6âV[¥^ à{öeU™ÈÒ|—:0ø=0‡»ÈdÛ«o‡¨ç*J“q%•[­ÆõYÃN¸˜.sQ„L‹udš[2×ð9þIýó:WÁn—ÔÈÿÐÙŽÊm™Xl¥Úƒ¾6×!lNl‡ÙVÙÕ§KU¼¤¤jVã\J%©UߊßB°ŽLcKfáb×ö>a“=Òb›~¹R]aG%[ú÷×js@«/9ðMطݘU×>yɲXÇ@}³ ” ëëF¢´tÜg^‚ÛvO\°žÓ¸wv‚p•Ï¯z3›K5i¤!$P>”ÄÅ€¹'Ò”VÆ›¬”¢Lž2r´ú@¤UMÃÉKÃúZ¯õ‰¹å6Ö×ÀtwŒë§ŸÂ¦bä„mß1âh|ô|É]}~¹0øÀMjA¢À´Ò(JâŠÝÁ­JP68ÌC&yrÈÌ׉e}­jŽ_cËJ½?êI0¬¯kêÛ>š«W™‹áø Æû‹™¯é|¡B¾Þá."TEXd Ô8”Ä!cwµ*E(ÎJ)ÊåÉ!Î[W"­j_ÔÃáТeX_×ÐXB;¤÷¯o°†O0~?¬:P½Cã (.²í¶±[·Ž‘‘ò!Wq£%ßÔ*leÃÀY)E™<^ˆKåZ¹T•60Ö.ðõ#«µøA\ý¤Á5;RmÆtkdÂ/8§)5~‚¿ ¬^0Ú #åCkg–¦¶eÍÌy)²—±Í¶¿‘ÔºÒ°6Ä¥ª<€(?Æ×&ÉõõuîA„áVŸ’õm0^h.—tÌxR*ô×aô©'ö:,¥H§|èÅ–ªÏ l5z„;8+e¦#b'#|û}2Æw(|Kc–J½ Èl6 뀶¾®wù‹^‚ÕŒo×—iúœ3HÓ êR –ŽÌ”9Š,Y“gP«Ö°:N œ[5SÃöû‰R‡!¢§ä[)•ç]€úœi}`úúºm¬’¸N±4Ð¥¹²ãvÑ`|;f¬(®´Fïlt©„¢LÔ8”Ä÷Z#½Aï–¤O%ÕÀY)N¹U®5YêÑeœ¼d–JÎE3dZØ°’þÇ<Èx·ÇñØÉñä¶e •@ùPÚ§ÏþÎFúTR œ•2S¡Â·ßüΦ/uˆZ°~ðšCæ3ÇÔXÊz¼ÍÓU¨žâxõ\2s«ñä¶e •DùD.çÉåfBO&enÝ'iÈåR%™?Fy¸VsS~$uˆ®mœw()Á´r”ºo³0*Dí˜Õi!3½:On[Bµ!sʇBäp>Ý£HTÙ1òè ;ö8M×jnʤ‘Ó¤ï¼äqpÞ 1hò^ˆ<¹Õ<¹Õ<¹ÕÜjžÜjžÜjžÜjžÜjnÕÜßû–qÕ(qpõOkª’Ô}¸ßøI?TY8H«®mhyK¸Ìu5ÍÏÂÎIœt÷eÕnQBÞ—`µRÄÂ`¯·EÀPË ­Ú¦ö˜½¹xû™«ž½>¹>€â‘¡yt¾{?|œ×'j)”ÉÆ€µ}YUÛÏäUùÛÜ{ç@Vå‡/€J1ìF+€¬¿7䀉[OW«O[æù ø¹‘‰y³ÇUY«ª•ˆõ!?BôÈD%D™Wj¼>-Ai6x£z)»ÕÎU R½ùª±’7 dõÙŠ@µg‡ˆëï•\†soØ)œaÏ4ßzfŒ[«W+•±>¹¸« œÿPô>ä +|•ÛqLãÑG8vâ¸âêÈ£„˜l´j©µ2ZíÆtÜß+åŒV¥ÔA¬6g<„/ŽæQ ‚H­çSrΣ“ÑçÖd}ØùYqàÔg]€sY]ç;]FëCª@5¼YÓÕ–5ÎC©3å8oÙ)kš1'ûüd6«>T *Ëʆ’§Uz(¥m)ûâ®CD `‡ÖHe/¾.ñ:ç—zN¥È9pgo &NC¦×ƒŒÞ‡¼>¶WÓøÕ°_’ñHj ñ)¤Xe6F„ 7p’m¾-è`'Öc†»Ü.Õ«‹ÂAZ=³þ^Ée8÷ÂF×;<ËûÄJ1{óãŠ+8'€Éª'„Ö‡\Aµ*¿Òø[² ‹ñR$UãY)V¹ óAyɃŒw)ŽEc#<ÕT‡ƒ”»\vW•{R­®«ÉëÉýºtÛn(–ÏzÏ!S×7o +×ï€×Ie®Žî™wõ3]ÔçbÜ—üäÇ8¹5|Æi·Ï æêRÛÚJkʱZ‘RO+ê8£U&µ:]•Z‰ieR‰’¬¢‰(üóJËMŠÞ—7—³«ÒZ@Œ²5Ýa^äº\G˜z™¯sª¾éÏU‚Ò*¥rMÏe³zT¬^Ê:ɬ‚õͦX=>Ü$ +bi>³U&X¬Qoybb¹GÄøkøÍ8¯ – +ÅÒ˜óýÿn).Õ¤òœÙðoã ¥À^Mmád³ZƒÊóië$s«ªo–oÞê*{»4ììÑeLb¤LÙ³""mx: `:mÉkž[ØgeTˆÑ‡Þ¬)Á„'0*T˜›Bá€{!úîIÞ ‘'·š'·š'·š'·š[Í“[Í“[Í“[Í“[]˜ZˆƒÜj QŠ.e '/¸®y÷vQ¤71ø(Z&†óÒX‘õ?(_œšZ”œÇº”){tÄÚ€m˜ZíÿÀWÑÏ)­«-C“ŠÓò´¶ jqání,Ì‹Ÿ"áIv‹¦½ULØ!h¢™Ù꛿îñ©¯Ýsçk’óAcrN‚ôþ佚ф€…VE4ö0úy˜XÜÒ~å4zʸVã³°%·ñ,é¹ßû)føÃÀqtÃp˜u¦~ã  Þø©ŽÑ*ý“©^æÖ0:åýÏéܲö3ÿ3…ÃÏJÎâOô(¦·ö£›ZB?K™^ Àv]’un ŸlçúÿôWþÀ‚¶i0´p6­ˆ[ì°©àC_5Xý#ú[¿öwX3ábñÎ廫ÄR½{ùÎâ¢NKðAîÏÿŒée S«èÓeª|Ýã¹wñ¢ÇxâºÊÞsôño>ÖP\å„”Ô•6Ò;nVÛm¯fëI$àø‰ÇûVÍ“J-ÛJ%ÖŒ¼Ž0¯óUwûYÐŽÉSõóó×n‘uÿÒmÿè—®Æù«xzµÒË—VŸÆ«ÚIµvnôWÿÚ_ÿqLZØÇòé"_—X®z‡Ã÷Æ 8Ç]Ap—‰ƒˆÍ?†¶CÍ‹Ž‘ž5È4ˆ·3ñŽzw(Ü{7e²*Ȳ`Û°¬!AÔQ“:ñKUnõ•¿Âÿzë]ú1y†V„ø›Ga°úCÿêm0îPY +ÙšUx6TT&·hVï9V§ +þîßÓ¬žzÑ  1[÷X®z‡ZœËÕî„Ð9ªe¢r›qóJ¸³¸NDß/ù¬¹g·þX¦ë*9o—ðíN6«DÃÃ` Ë{à÷ªIï%ËM´z9—ãTûQŽŸà–ˆþþ7fö\"jþÃ_3ÙþÖç~xBá'€ŸùÜ·ˆˆY›]*KÐŒãî“«%"úÔç5«"ðÈqxq~ü’Æ•=·‘¨j¼´ºSá>j¤Vç·&~]2 xzÀF¸ÕíŸ1X•§_yÞùDÀÎ<#N’ÕîïRB÷Ô}KôÏÿÅ/ói‰Šy†ù¿õË !V^¢ñË¿e²JŸ‰‡}/FkïñAßú7Ÿû· âëS©È×+.–(ec—ˆJ:˜zðƒªóW“ZšŠ°ëª–wïÒÙQ™þáðÅž~aÛÒê„ØÍ„öpç6,e5í¯,¬+¢–”Á,ýûÿð­óñ÷ÿt±võ%O^OøüO}ãן -Oüú7>e²ÚkC¦6£waô_þëC ¢‹|½â›9‘‘×*•šÎ‡ØWÆñ¸Aª)×U¶Jgê8<ýZ€´šx^?„ÿ¾2²u¶­Yýí³õè*^?ûÛÚ‡KC­Z¤[‚ÿ©ÿù0.’–àCµ¯@m¾çÓçß$-ßÄ/~ž|Y¥å[eþwƒeQýŸÙ׶&cëÊOž4s|‰œc’§JåûŸwsïûXÍ8/ñš¼Î6Ï/ Ú¼;ç'F¯LN^8]ÛeadëZ 1'®Ü°ž÷^†Úü™û¼‡L³‘sBdü%Ó+M¢·`ÝãSKö8פ²÷«ìº*ƒª)gl#Ž3"Ä’gÑŠ˜S Çã‹Ž©qtcxxƒš|H>–¬Æø=ðŒ:³ÅçýÎmÊjÕå¬ßÿìÕUßòÁóv£qìys©Ü’žLglþC6+[FÍSWg…ö“9õ˜ƒwV3¼1µA ë N”ßD¾<Íû«ËÂ$5eÿ(s„ú¡ ÿ[Ð Û¨bú—³‡žaF.”¨]±K¡îÇIEND®B`‚ + {name} + {classes_bar} +
    {classes_tested_percent}
    +
    {classes_number}
    + {methods_bar} +
    {methods_tested_percent}
    +
    {methods_number}
    + {crap} + {lines_bar} +
    {lines_executed_percent}
    +
    {lines_number}
    + + + + + + + Code Coverage for {full_path} + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + +{items} + +
     
    Code Coverage
     
    Lines
    Functions and Methods
    Classes and Traits
    +
    +

    Legend

    +

    + Low: 0% to {low_upper_bound}% + Medium: {low_upper_bound}% to {high_lower_bound}% + High: {high_lower_bound}% to 100% +

    +

    + Generated by PHP_CodeCoverage {version} using PHP {php_version}{generator} at {date}. +

    +
    +
    + + + + +/*! + * Bootstrap v2.2.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover{color:#808080}.text-warning{color:#c09853}a.text-warning:hover{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover{color:#2d6987}.text-success{color:#468847}a.text-success:hover{color:#356635}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.warning td{background-color:#fcf8e3}.table tbody tr.info td{background-color:#d9edf7}.table-hover tbody tr.success:hover td{background-color:#d0e9c6}.table-hover tbody tr.error:hover td{background-color:#ebcccc}.table-hover tbody tr.warning:hover td{background-color:#faf2cc}.table-hover tbody tr.info:hover td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #bbb;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,0.15) rgba(0,0,0,0.15) rgba(0,0,0,0.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret{border-top-color:#555;border-bottom-color:#555}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media .pull-left{margin-right:10px}.media .pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} +/*! + * Bootstrap Responsive v2.2.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */@-ms-viewport{width:device-width}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} +body { + padding-top: 10px; +} + +.popover { + width: 600px; +} + +.table td { + padding-top: 3px; + padding-bottom: 3px; +} + +.table-condensed td { + padding-top: 0; + padding-bottom: 0; +} + +.table .progress { + margin-bottom: inherit; +} + +.table-borderless th, .table-borderless td { + border: 0 !important; +} + +.table tbody td.success, li.success, span.success { + background-color: #dff0d8; +} + +.table tbody tr.danger, .table tbody td.danger, li.danger, span.danger { + background-color: #f2dede; +} + +.table tbody td.warning, li.warning, span.warning { + background-color: #fcf8e3; +} + +.table tbody td.info { + background-color: #d9edf7; +} + +td.big { + width: 100px; +} + +td.small { +} + +td.codeLine { + font-family: monospace; + white-space: pre; +} + +td span.comment { + color: #888a85; +} + +td span.default { + color: #2e3436; +} + +td span.html { + color: #888a85; +} + +td span.keyword { + color: #2e3436; + font-weight: bold; +} + +pre span.string { + color: #2e3436; +} + +span.success, span.warning, span.danger { + margin-right: 2px; + padding-left: 10px; + padding-right: 10px; + text-align: center; +} + +#classCoverageDistribution, #classComplexity { + height: 200px; + width: 475px; +} + + {icon}{name} + {lines_bar} +
    {lines_executed_percent}
    +
    {lines_number}
    + {methods_bar} +
    {methods_tested_percent}
    +
    {methods_number}
    + {classes_bar} +
    {classes_tested_percent}
    +
    {classes_number}
    + + + + {name} + {methods_bar} +
    {methods_tested_percent}
    +
    {methods_number}
    + {crap} + {lines_bar} +
    {lines_executed_percent}
    +
    {lines_number}
    + + + + + + + Code Coverage for {full_path} + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + +{items} + +
     
    Code Coverage
     
    Classes and Traits
    Functions and Methods
    Lines
    + + +{lines} + +
    + +
    + + + + + +/*! +* Bootstrap.js by @fat & @mdo +* Copyright 2012 Twitter, Inc. +* http://www.apache.org/licenses/LICENSE-2.0.txt +*/ +!function($){"use strict";$(function(){$.support.transition=function(){var transitionEnd=function(){var name,el=document.createElement("bootstrap"),transEndEventNames={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(name in transEndEventNames)if(void 0!==el.style[name])return transEndEventNames[name]}();return transitionEnd&&{end:transitionEnd}}()})}(window.jQuery),!function($){"use strict";var dismiss='[data-dismiss="alert"]',Alert=function(el){$(el).on("click",dismiss,this.close)};Alert.prototype.close=function(e){function removeElement(){$parent.trigger("closed").remove()}var $parent,$this=$(this),selector=$this.attr("data-target");selector||(selector=$this.attr("href"),selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,"")),$parent=$(selector),e&&e.preventDefault(),$parent.length||($parent=$this.hasClass("alert")?$this:$this.parent()),$parent.trigger(e=$.Event("close")),e.isDefaultPrevented()||($parent.removeClass("in"),$.support.transition&&$parent.hasClass("fade")?$parent.on($.support.transition.end,removeElement):removeElement())};var old=$.fn.alert;$.fn.alert=function(option){return this.each(function(){var $this=$(this),data=$this.data("alert");data||$this.data("alert",data=new Alert(this)),"string"==typeof option&&data[option].call($this)})},$.fn.alert.Constructor=Alert,$.fn.alert.noConflict=function(){return $.fn.alert=old,this},$(document).on("click.alert.data-api",dismiss,Alert.prototype.close)}(window.jQuery),!function($){"use strict";var Button=function(element,options){this.$element=$(element),this.options=$.extend({},$.fn.button.defaults,options)};Button.prototype.setState=function(state){var d="disabled",$el=this.$element,data=$el.data(),val=$el.is("input")?"val":"html";state+="Text",data.resetText||$el.data("resetText",$el[val]()),$el[val](data[state]||this.options[state]),setTimeout(function(){"loadingText"==state?$el.addClass(d).attr(d,d):$el.removeClass(d).removeAttr(d)},0)},Button.prototype.toggle=function(){var $parent=this.$element.closest('[data-toggle="buttons-radio"]');$parent&&$parent.find(".active").removeClass("active"),this.$element.toggleClass("active")};var old=$.fn.button;$.fn.button=function(option){return this.each(function(){var $this=$(this),data=$this.data("button"),options="object"==typeof option&&option;data||$this.data("button",data=new Button(this,options)),"toggle"==option?data.toggle():option&&data.setState(option)})},$.fn.button.defaults={loadingText:"loading..."},$.fn.button.Constructor=Button,$.fn.button.noConflict=function(){return $.fn.button=old,this},$(document).on("click.button.data-api","[data-toggle^=button]",function(e){var $btn=$(e.target);$btn.hasClass("btn")||($btn=$btn.closest(".btn")),$btn.button("toggle")})}(window.jQuery),!function($){"use strict";var Carousel=function(element,options){this.$element=$(element),this.options=options,"hover"==this.options.pause&&this.$element.on("mouseenter",$.proxy(this.pause,this)).on("mouseleave",$.proxy(this.cycle,this))};Carousel.prototype={cycle:function(e){return e||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval($.proxy(this.next,this),this.options.interval)),this},to:function(pos){var $active=this.$element.find(".item.active"),children=$active.parent().children(),activePos=children.index($active),that=this;if(!(pos>children.length-1||0>pos))return this.sliding?this.$element.one("slid",function(){that.to(pos)}):activePos==pos?this.pause().cycle():this.slide(pos>activePos?"next":"prev",$(children[pos]))},pause:function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&$.support.transition.end&&(this.$element.trigger($.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){return this.sliding?void 0:this.slide("next")},prev:function(){return this.sliding?void 0:this.slide("prev")},slide:function(type,next){var e,$active=this.$element.find(".item.active"),$next=next||$active[type](),isCycling=this.interval,direction="next"==type?"left":"right",fallback="next"==type?"first":"last",that=this;if(this.sliding=!0,isCycling&&this.pause(),$next=$next.length?$next:this.$element.find(".item")[fallback](),e=$.Event("slide",{relatedTarget:$next[0]}),!$next.hasClass("active")){if($.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(e),e.isDefaultPrevented())return;$next.addClass(type),$next[0].offsetWidth,$active.addClass(direction),$next.addClass(direction),this.$element.one($.support.transition.end,function(){$next.removeClass([type,direction].join(" ")).addClass("active"),$active.removeClass(["active",direction].join(" ")),that.sliding=!1,setTimeout(function(){that.$element.trigger("slid")},0)})}else{if(this.$element.trigger(e),e.isDefaultPrevented())return;$active.removeClass("active"),$next.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return isCycling&&this.cycle(),this}}};var old=$.fn.carousel;$.fn.carousel=function(option){return this.each(function(){var $this=$(this),data=$this.data("carousel"),options=$.extend({},$.fn.carousel.defaults,"object"==typeof option&&option),action="string"==typeof option?option:options.slide;data||$this.data("carousel",data=new Carousel(this,options)),"number"==typeof option?data.to(option):action?data[action]():options.interval&&data.cycle()})},$.fn.carousel.defaults={interval:5e3,pause:"hover"},$.fn.carousel.Constructor=Carousel,$.fn.carousel.noConflict=function(){return $.fn.carousel=old,this},$(document).on("click.carousel.data-api","[data-slide]",function(e){var href,$this=$(this),$target=$($this.attr("data-target")||(href=$this.attr("href"))&&href.replace(/.*(?=#[^\s]+$)/,"")),options=$.extend({},$target.data(),$this.data());$target.carousel(options),e.preventDefault()})}(window.jQuery),!function($){"use strict";var Collapse=function(element,options){this.$element=$(element),this.options=$.extend({},$.fn.collapse.defaults,options),this.options.parent&&(this.$parent=$(this.options.parent)),this.options.toggle&&this.toggle()};Collapse.prototype={constructor:Collapse,dimension:function(){var hasWidth=this.$element.hasClass("width");return hasWidth?"width":"height"},show:function(){var dimension,scroll,actives,hasData;if(!this.transitioning){if(dimension=this.dimension(),scroll=$.camelCase(["scroll",dimension].join("-")),actives=this.$parent&&this.$parent.find("> .accordion-group > .in"),actives&&actives.length){if(hasData=actives.data("collapse"),hasData&&hasData.transitioning)return;actives.collapse("hide"),hasData||actives.data("collapse",null)}this.$element[dimension](0),this.transition("addClass",$.Event("show"),"shown"),$.support.transition&&this.$element[dimension](this.$element[0][scroll])}},hide:function(){var dimension;this.transitioning||(dimension=this.dimension(),this.reset(this.$element[dimension]()),this.transition("removeClass",$.Event("hide"),"hidden"),this.$element[dimension](0))},reset:function(size){var dimension=this.dimension();return this.$element.removeClass("collapse")[dimension](size||"auto")[0].offsetWidth,this.$element[null!==size?"addClass":"removeClass"]("collapse"),this},transition:function(method,startEvent,completeEvent){var that=this,complete=function(){"show"==startEvent.type&&that.reset(),that.transitioning=0,that.$element.trigger(completeEvent)};this.$element.trigger(startEvent),startEvent.isDefaultPrevented()||(this.transitioning=1,this.$element[method]("in"),$.support.transition&&this.$element.hasClass("collapse")?this.$element.one($.support.transition.end,complete):complete())},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var old=$.fn.collapse;$.fn.collapse=function(option){return this.each(function(){var $this=$(this),data=$this.data("collapse"),options="object"==typeof option&&option;data||$this.data("collapse",data=new Collapse(this,options)),"string"==typeof option&&data[option]()})},$.fn.collapse.defaults={toggle:!0},$.fn.collapse.Constructor=Collapse,$.fn.collapse.noConflict=function(){return $.fn.collapse=old,this},$(document).on("click.collapse.data-api","[data-toggle=collapse]",function(e){var href,$this=$(this),target=$this.attr("data-target")||e.preventDefault()||(href=$this.attr("href"))&&href.replace(/.*(?=#[^\s]+$)/,""),option=$(target).data("collapse")?"toggle":$this.data();$this[$(target).hasClass("in")?"addClass":"removeClass"]("collapsed"),$(target).collapse(option)})}(window.jQuery),!function($){"use strict";function clearMenus(){$(toggle).each(function(){getParent($(this)).removeClass("open")})}function getParent($this){var $parent,selector=$this.attr("data-target");return selector||(selector=$this.attr("href"),selector=selector&&/#/.test(selector)&&selector.replace(/.*(?=#[^\s]*$)/,"")),$parent=$(selector),$parent.length||($parent=$this.parent()),$parent}var toggle="[data-toggle=dropdown]",Dropdown=function(element){var $el=$(element).on("click.dropdown.data-api",this.toggle);$("html").on("click.dropdown.data-api",function(){$el.parent().removeClass("open")})};Dropdown.prototype={constructor:Dropdown,toggle:function(){var $parent,isActive,$this=$(this);if(!$this.is(".disabled, :disabled"))return $parent=getParent($this),isActive=$parent.hasClass("open"),clearMenus(),isActive||$parent.toggleClass("open"),$this.focus(),!1},keydown:function(e){var $this,$items,$parent,isActive,index;if(/(38|40|27)/.test(e.keyCode)&&($this=$(this),e.preventDefault(),e.stopPropagation(),!$this.is(".disabled, :disabled"))){if($parent=getParent($this),isActive=$parent.hasClass("open"),!isActive||isActive&&27==e.keyCode)return $this.click();$items=$("[role=menu] li:not(.divider):visible a",$parent),$items.length&&(index=$items.index($items.filter(":focus")),38==e.keyCode&&index>0&&index--,40==e.keyCode&&$items.length-1>index&&index++,~index||(index=0),$items.eq(index).focus())}}};var old=$.fn.dropdown;$.fn.dropdown=function(option){return this.each(function(){var $this=$(this),data=$this.data("dropdown");data||$this.data("dropdown",data=new Dropdown(this)),"string"==typeof option&&data[option].call($this)})},$.fn.dropdown.Constructor=Dropdown,$.fn.dropdown.noConflict=function(){return $.fn.dropdown=old,this},$(document).on("click.dropdown.data-api touchstart.dropdown.data-api",clearMenus).on("click.dropdown touchstart.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("touchstart.dropdown.data-api",".dropdown-menu",function(e){e.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",toggle,Dropdown.prototype.toggle).on("keydown.dropdown.data-api touchstart.dropdown.data-api",toggle+", [role=menu]",Dropdown.prototype.keydown)}(window.jQuery),!function($){"use strict";var Modal=function(element,options){this.options=options,this.$element=$(element).delegate('[data-dismiss="modal"]',"click.dismiss.modal",$.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};Modal.prototype={constructor:Modal,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var that=this,e=$.Event("show");this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.backdrop(function(){var transition=$.support.transition&&that.$element.hasClass("fade");that.$element.parent().length||that.$element.appendTo(document.body),that.$element.show(),transition&&that.$element[0].offsetWidth,that.$element.addClass("in").attr("aria-hidden",!1),that.enforceFocus(),transition?that.$element.one($.support.transition.end,function(){that.$element.focus().trigger("shown")}):that.$element.focus().trigger("shown")}))},hide:function(e){e&&e.preventDefault(),e=$.Event("hide"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),$(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),$.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal())},enforceFocus:function(){var that=this;$(document).on("focusin.modal",function(e){that.$element[0]===e.target||that.$element.has(e.target).length||that.$element.focus()})},escape:function(){var that=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(e){27==e.which&&that.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var that=this,timeout=setTimeout(function(){that.$element.off($.support.transition.end),that.hideModal()},500);this.$element.one($.support.transition.end,function(){clearTimeout(timeout),that.hideModal()})},hideModal:function(){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(callback){var animate=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var doAnimate=$.support.transition&&animate;this.$backdrop=$('